⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewcmos.c

📁 Many C samples. It is a good sample for students to learn C language.
💻 C
字号:
#include <stdio.h>
#include <dos.h>

typedef struct
{	char	seconds;	/* AT Real Time Clock (RTC): Seconds */
	char	secalrm;	/* AT RTC: Seconds Alarm */
	char	minutes;	/* AT RTC: Minutes */
	char	minalrm;	/* AT RTC: Minutes Alarm */
	char	hours;		/* AT RTC: Hours */
	char	hrsalrm;	/* AT RTC: Hours Alarm */
	char	dayofweek;	/* AT RTC: day of week */
	char	dayofmon;	/* AT RTC: day of month */
	char	month;		/* AT RTC: month */
	char	year;		/* AT RTC: year */
	char	aregister;	/* STATUS REGISTER A */
	char	bregister;	/* STATUS REGISTER B */
	char	cregister;	/* STATUS REGISTER C */
	char	dregister;	/* STATUS REGISTER D */
	char	diagnostic;	/* Diagnostics status byte */
	char	shutdown;	/* Shutdown status byte */
	char	diskettes;	/* A & B diskette types */
	char	reserved1;	/* undefined */
	char	harddrive;	/* C & D hard drive types */
	char	reserved2;	/* undefined */
	char	equipment;	/* equipment byte */
	char	lowbyte;	/* low byte of base memory */
	char	highbyte;	/* high byte of base memory */
				/* 100h = 256k, 200h = 512k, 280h = 640k */
	char	extlow;		/* low byte of extended memory */
	char	exthigh;	/* high byte of extended memory */
				/* 200h=512k;400h=1024k;etc to 3c00h=15360k */
	char	drivec;		/* more data on drive c */
	char	drived;		/* more data on drive d */
	char	reserved[19];	/* reserved */
	unsigned checksum;
	char	extlow1;	/* same as extlow */
	char	exthigh1;	/* same as exthigh */
	char	century;	/* binary coded decimal value for century */
				/* 19h = 1900 for example */
	char	infoflag;	/* bit 7 set = top 128k installed */
	char	info[12];	
} CMOS, *CMOSPTR;

/* -------------------------------------------------------------------------
                      AT REAL TIME CLOCK STATUS REGISTER A
===========================================================================
7 6 5 4 3 2 1 0   FUNCTION               ALLOWABLE VALUES
---------------------------------------------------------------------------
X                 UPDATE IN PROGRESS    1=DATE/TIME BEING UPDATED 0=NOT
  X X X           22 STAGE DIVIDER      DEFAULT=010, 32.768 KHZ TIME BASE
        X X X X   RATE SELECTION        DEFAULT=0110, 1.024 KHZ FREQUENCY
===========================================================================
                  AT REAL TIME CLOCK STATUS REGISTERS B
===========================================================================
7 6 5 4 3 2 1 0   NAME                ALLOWABLE VALUES
--------------------------------------------------------------------------
X                 SET, 1 PER SECOND   0=UPDATE NORMALLY, 1=ABORT UPDATE
  X               PERIODIC INT ENABLE 0=DISABLE INT (DEFAULT), 1=ENABLED
    X             ALARM INT ENABLE    0=DISABLED (DEFAULT), 1=ENABLED
      X           UPDATE END INT ENA. 0=DISABLED (DEFAULT), 1=ENABLED
        X         SQUARE WAVE ENABLE  0=DIS (DEF), 1=ENA, PER REG A 0-3
          X       DATE MODE           0=BCD (DEFAULT), 1=BINARY
            X     24/12 MODE          0=12 HOUR, 1=24 HOUR FORMAT (DEFAULT)
              X   DAYLIGHT SAVING ENA 0=DISABLED (DEFAULT), 1=ENABLED
===========================================================================
                  AT REAL TIME CLOCK STATUS REGISTER C
===========================================================================
7 6 5 4 3 2 1 0   NAME                ALLOWABLE VALUES
-------------------------------------------------------------------------
X                 IRQF FLAG           READ ONLY
  X               PF FLAG             READ ONLY
    X             AF FLAG             READ ONLY
      X           UF FLAG             READ ONLY
        X X X X   RESERVED            SHOULD ALWAYS BE ZERO
===========================================================================
                  AT CMOS STATUS REGISTER D
===========================================================================
7 6 5 4 3 2 1 0   NAME                ALLOWABLE VALUES                   
--------------------------------------------------------------------------
X                 VALID RAM BIT       0=BATT DEAD,RAM INVALID, 1=BATT GOOD
  X X X X X X X   RESERVED            SHOULD ALWAYS BE ZERO
===========================================================================
                  AT CMOS DIAGNOSTICS BYTE
===========================================================================
7 6 5 4 3 2 1 0   NAME                ALLOWABLE VALUES
------------------------------------------------------------------------
X                 POWER STAT OF RTC   1=CHIP HAS LOST POWER, 0=NOT
  X               CHECKSUM STATUS     0=CHECKSUM OK, 1=NOT OK
    X             CONFIGURATION INFO  0=VALID INFO, 1=NOT VALID
      X           MEMORY SIZE COMPARE 0=SAME SIZE, 1=NOT SAME SIZE
        X         FIXED DISK STATUS   0=OK, 1=DRIVE OR ADAPTER FAILED
          X       TIME STATUS         0=TIME IS OK, 1=TIME NOT OK
            X X   RESERVED
===========================================================================
                  AT CMOS DRIVE TYPE BYTE
===========================================================================
7 6 5 4 3 2 1 0   FUNCTION            ALLOWABLE VALUES
-------------------------------------------------------------------------
X X X X           TYPE OF FIRST DRIVE 0000=NO DRIVE,   0001=360K 5.25"
                                      0010=1.2M 5.25"  0011=720K 3.5"
                                      0100=1.44M 3.5" 

        X X X X   TYPE OF SECOND DRIVE
===========================================================================
                   AT CMOS FIXED DRIVE TYPES
===========================================================================
7 6 5 4 3 2 1 0    NAME               ALLOWABLE VALUES
----------------------------------------------------------------------------
X X X X            FIXED DISK C TYPE  0000=NO DRIVE 1H TO 0EH SEE CHART
        X X X X    FIXED DISK D TYPE  0000=NO DRIVE 1H TO 0EH SEE CHART
                   IF BYTE= 0FH THEN SEE EXTENDED BYTE FOR DRIVE TYPE
===========================================================================
                   AT CMOS EQUIPMENT BYTE
===========================================================================
7 6 5 4 3 2 1 0    NAME                  ALLOWABLE VALUES
-----------------------------------------------------------------------------
X X                NUMBER OF DISK DRIVES 00=1,01=2,10=3,11=4
    X X            PRIMARY DISPLAY TYPE  00=DISPLAY HAS BIOS or EGA,
                                         01=40 COL CGA,
                                         10=80 COL CGA, 
                                         11=MDA,
                                         101=EGA
        X X        NOT USED
            X      MATH COPROCESSOR      0=NOT INSTALLED, 1=INSTALLED
              X    DISK DRIVES AVAILABLE 0=NO DRIVES, 1=DISK DRIVES AVAILABLE
===========================================================================
           AT CMOS DRIVE C AND D EXTENDED DRIVE TYPE BYTES
===========================================================================
7 6 5 4 3 2 1 0    NAME                  ALLOWABLE VALUES
-----------------------------------------------------------------------------
X X X X X X X X    DRIVE C TYPE BYTE     SEE NEXT CHART FOR TYPES
X X X X X X X X    DRIVE D TYPE BYTE     SEE NEXT CHART FOR TYPES

                   IF FIXED DRIVE 4 BITS FOR C IS 0-0EH IGNOR EXTENDED C
                   IF FIXED DRIVE 4 BITS FOR D IS 0-0EH IGNOR EXTENDED D

	                    AT HARD DISK TYPES

	+--------------------------------------------------------+
	|      |          |       |      |      |         |      |
	| DISK | CYLINDER | TOTAL | PRE- | LAND | SECTORS | SIZE |
	| TYPE |  COUNT   | HEADS | COMP | ZONE | PER/TRK |  MB  |
	|------+----------+-------+------+------+---------+------|
	|   1  |    306   |    4  |  128 |  305 |   17    | 10.1 |
	|------+----------+-------+------+------+---------+------|
	|   2  |    615   |    4  |  300 |  615 |   17    | 20.4 |
	|------+----------+-------+------+------+---------+------|
	|   3  |    615   |    6  |  300 |  615 |   17    | 30.6 |
	|------+----------+-------+------+------+---------+------|
	|   4  |    940   |    8  |  512 |  940 |   17    | 62.4 |
	|------+----------+-------+------+------+---------+------|
	|   5  |    940   |    6  |  512 |  940 |   17    | 46.8 |
	|------+----------+-------+------+------+---------+------|
	|   6  |    615   |    4  | NONE |  615 |   17    | 20.4 |
	|------+----------+-------+------+------+---------+------|
	|   7  |    462   |    8  |  256 |  511 |   17    | 30.6 |
	|------+----------+-------+------+------+---------+------|
	|   8  |    733   |    5  | NONE |  733 |   17    | 30.4 |
	|------+----------+-------+------+------+---------+------|
	|   9  |    900   |   15  | NONE |  901 |   17    |112.0 |
	|------+----------+-------+------+------+---------+------|
	|  10  |    820   |    3  | NONE |  820 |   17    | 20.4 |
	|------+----------+-------+------+------+---------+------|
	|  11  |    855   |    5  | NONE |  855 |   17    | 35.4 |
	|------+----------+-------+------+------+---------+------|
	|  12  |    855   |    7  | NONE |  855 |   17    | 49.6 |
	|------+----------+-------+------+------+---------+------|
	|  13  |    306   |    8  |  128 |  319 |   17    | 20.3 |
	|------+----------+-------+------+------+---------+------|
	|  14  |    733   |    7  | NONE |  733 |   17    | 42.5 |
	|------+----------+-------+------+------+---------+------|
	|  16  |    612   |    4  |    0 |  663 |   17    | 20.5 |
	|------+----------+-------+------+------+---------+------|
	|  17  |    977   |    5  |  300 |  977 |   17    | 40.5 |
	|------+----------+-------+------+------+---------+------|
	|  18  |    977   |    7  | NONE |  977 |   17    | 56.7 |
	|------+----------+-------+------+------+---------+------|
	|  19  |   1024   |    7  |  512 | 1023 |   17    | 59.5 |
	|------+----------+-------+------+------+---------+------|
	|  20  |    733   |    5  |  300 |  732 |   17    | 30.4 |
	|------+----------+-------+------+------+---------+------|
	|  21  |    733   |    7  |  300 |  732 |   17    | 42.5 |
	|------+----------+-------+------+------+---------+------|
	|  22  |    733   |    5  |  300 |  733 |   17    | 30.4 |
	|------+----------+-------+------+------+---------+------|
	|  23  |    306   |    4  |    0 |  336 |   17    | 10.1 |
	|------+----------+-------+------+------+---------+------|
	|  25  |    615   |    4  |    0 |  615 |   17    | 20.4 |
	|------+----------+-------+------+------+---------+------|
	|  26  |   1024   |    4  | NONE | 1023 |   17    | 34.0 |
	|------+----------+-------+------+------+---------+------|
	|  27  |   1024   |    5  | NONE | 1023 |   17    | 42.5 |
	|------+----------+-------+------+------+---------+------|
	|  28  |   1024   |    8  | NONE | 1023 |   17    | 68.0 |
	|------+----------+-------+------+------+---------+------|
	|  29  |    512   |    8  |  256 |  512 |   17    | 34.0 |
	|------+----------+-------+------+------+---------+------|
	|  30  |    615   |    2  |  615 |  615 |   17    | 10.2 |
	|------+----------+-------+------+------+---------+------|
	|  31  |    989   |    5  |    0 |  989 |   17    | 41.0 |
	|------+----------+-------+------+------+---------+------|
	|  32  |   1020   |   15  | NONE | 1024 |   17    |127.0 |
	|------+----------+-------+------+------+---------+------|
	|  35  |   1024   |    9  | 1024 | 1024 |   17    | 76.5 |
	|------+----------+-------+------+------+---------+------|
	|  36  |   1024   |    5  |  512 | 1024 |   17    | 42.5 |
	|------+----------+-------+------+------+---------+------|
	|  37  |    830   |   10  | NONE |  830 |   17    | 68.8 |
	|------+----------+-------+------+------+---------+------|
	|  38  |    823   |   10  |  256 |  824 |   17    | 68.3 |
	|------+----------+-------+------+------+---------+------|
	|  39  |    615   |    4  |  128 |  664 |   17    | 20.4 |
	|------+----------+-------+------+------+---------+------|
	|  40  |    615   |    8  |  128 |  664 |   17    | 40.8 |
	|------+----------+-------+------+------+---------+------|
	|  41  |    917   |   15  | NONE |  918 |   17    |114.1 |
	|------+----------+-------+------+------+---------+------|
	|  42  |   1023   |   15  | NONE | 1024 |   17    |127.3 |
	|------+----------+-------+------+------+---------+------|
	|  43  |    823   |   10  |  512 |  823 |   17    | 68.3 |
	|------+----------+-------+------+------+---------+------|
	|  44  |    820   |    6  | NONE |  820 |   17    | 40.8 |
	|------+----------+-------+------+------+---------+------|
	|  45  |   1024   |    8  | NONE | 1024 |   17    | 68.0 |
	|------+----------+-------+------+------+---------+------|
	|  46  |    925   |    9  | NONE |  925 |   17    | 69.1 |
	|------+----------+-------+------+------+---------+------|
	|  47  |    699   |    7  |  256 |  700 |   17    | 40.6 |
	+--------------------------------------------------------+
  --------------------------------------------------------------------- */
#define	CMOS_ADDR	0x70		/* address port of CMOS */
#define	CMOS_DATA	0x71		/* data port for CMOS */

void GetCMOS(char *cmosdata)		/* read CMOS data (64 bytes) */
{
unsigned char j, byte;
	for (j=0; j<64; j++)
	{	disable();			/* disable interrupts */
		outportb(CMOS_ADDR,j);		/* specify byte to get */
		byte= inportb(CMOS_DATA);	/* get data */
		enable();			/* enable interrupts */
		*cmosdata++ = byte;		/* save CMOS data */
	}
}

void ReadCMOS(void)
{
static char *floppy[] 	= {	"None", 
				"360K 5.25-inch", 
				"1.2M 5.25-inch", 
				"720K 3.5-inch",
				"1.44M 3.5-inch"
			};
static char *display[] 	= {	"EGA",			/* 00 */
				"40 column CGA",	/* 01 */
				"80 column CGA",	/* 10 */
				"MDA",			/* 11 */
			};
static	char *math[] 	= {	"Not Installed",
				"Installed"
			};
static 	char *diag[] 	= {	"Time","Hard Dr","Memory","CnfInfo","Chksum","PwrOK"};
static	char *status[]	= {	"OK","Not OK" };
static	char *hardtbl[] = {
		"谀哪哪穆哪哪哪哪哪履哪哪哪履哪哪穆哪哪哪履哪哪哪哪履哪哪目",
		"矰rive 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -