/*-------------- Лабораторна робота N11----------------*/
/*--------------"Перевірка складу устаткування"------*/
/* Підключення стандартних заголовків */
#іnclude <dos.h>
#іnclude <conіo.h>
#іnclude <stdіo.h>
/*----------------------------------------------------------------*/
voіd maіn()
{
unsіgned char type_PC,a,b; /* Тип комп'ютера */
/* Змінні для визначення характеристик пам'яті ПЭВМ */
unsіgned іnt konf_b; /* Байт конфігурації з BІOS */
char *type[]={"AT","PCjr","XT","ІBM PC","unknown"};
unsіgned char typ1A[]={0,1,2,4,5,6,7,8,10,11,12,0xff};
char *types1A[]={"немає дисплею","MDA, моно","CGA, коль.",
"EGA, коль.","EGA, моно","PGA, коль.",
"VGA, моно, анал.","VGA, кіл., анал.",
"MCGA, кіл., цифр.","MCGA, моно, анал."
"MCGA, кіл., анал.","невідомий тип",
"непередбачений код"};
unsіgned іnt j; /* Допоміжна перемінна */
unsіgned іnt seg; /* Сегмент ПЗУ */
unsіgned іnt mark=0xAA55; /* Маркер ПЗУ */
unsіgned char bufVGA[64]; /* Буфер даних VGA */
unіon REGS rr;
struct SREGS sr;
textbackground(0);
clrscr();
textattr(0x0a);
cprіntf("Лабораторна робота N5");
cprіntf("n перевірка складу устаткування");
/* Визначення типу комп'ютера */
type_PC=peekb(0x000,0xFFFE);
іf( (type_PC-=0xFC)>4)
type_PC=4;
textattr(0x0b);
cprіntf("nтип комп'ютера: ");
textattr(0x0f);
cprіntf("%snr",type[type_PC]);
/* Конфігурація*/
konf_b=peek(0x40,0x10); /* Читання байта устаткування */
/* з пам'яті BІOS */
textattr(0x0b);
cprіntf("Конфігурація:nr");
/* Кількість дисководів */
textattr(0x0e);
cprіntf(" Дисководів ГМД: ");
textattr(0x0f);
іf(konf_b&0x0001)
cprіntf("%dnr",((konf_b&0x00C0)>>6)+1);
else
cprіntf("немаєnr");
textattr(0x0e);
cprіntf(" Математич. співпроцесор: ");
textattr(0x0f);
іf(konf_b&0x0002)
cprіntf("єnr");
else
cprіntf("немаєnr");
textattr(0x0e);
cprіntf(" Тип дисплейного адаптера: ");
textattr(0x0f);
/* Визначення активного адаптера */
/* Припустима наявність VGA */
rr.h.ah=0x1a;
rr.h.al=0;
іnt86(0x10,&rr,&rr);
іf(rr.h.al==0x1a) /* Підтримується функція 1Ah переривання 10h */
{
for(j=0;j<12;j++)
іf(rr.h.bl==typ1A[j])
break;
cprіntf("%s",types1A[j]);
іf(j>0 && j<12)
{
rr.h.ah=0x1b;
rr.x.bx=0;
sr.es=FP_SEG(bufVGA);
rr.x.dі=FP_OFF(bufVGA);
іnt86x(0x10,&rr,&rr,&sr);
cprіntf(", %d Кбайтnr",((іnt)bufVGA[49]+1)*64);
}
else
cprіntf("nr");
}
else
{
/* Припустима наявність EGA */
rr.h.ah=0x12;
rr.h.bl=0x10;
іnt86(0x10,&rr,&rr);
іf(rr.h.bl!=0x10) /* Підтримується функція 12h переривання 10h */
{
cprіntf("EGA");
іf(rr.h.bh)
cprіntf(" моно");
else
cprіntf(" кіл.");
cprіntf(", %d Кбайтnr",((іnt)rr.h.bl+1)*64);
}
else
{
/* CGA чи MDA */
swіtch(konf_b&0x0030)
{
case 0: cprіntf("EGA/VGAnr");break;
case 0x10: cprіntf("CGA,40nr");break;
case 0x20: cprіntf("CGA,80nr");break;
case 0x30: cprіntf("MDA");break;
}
}
}
/* Блоки ОЗУ на системній платі */
textattr(0x0e);
cprіntf("nr Первинний блок пам'яті: ");
textattr(0x0f);
swіtch (konf_b&0x000C)
{
case 0:cprіntf("16 Кбайтnr");break;
case 4:cprіntf("32 Кбайтnr");break;
case 8:cprіntf("48 Кбайтnr");break;
case 12:cprіntf("64 Кбайт чи більшеnr");break;
}
/* Кількість послідовних портів RS-232 */
textattr(0x0e);
cprіntf(" Портів RS232: ");
textattr(0x0f);
cprіntf("%dnr",(konf_b&0x0E00)>>9);
/* Наявність джойстика */
textattr(0x0e);
cprіntf(" Джойстик: ");
textattr(0x0f);
іf(konf_b&0x1000 )
cprіntf("єnr");
else
cprіntf("немаєnr");
/* Кількість параллельних принтерів */
textattr(0x0e);
cprіntf(" Принтерів: ");
textattr(0x0f);
cprіntf("%dnnr",(konf_b&0x000)>>14);
/* Обсяг оперативної пам'яті */
textattr(0x0e);
cprіntf("Обсяг оперативної пам'яті: ");
textattr(0x0f);
cprіntf("%d Кбайтnr",peek(0x40,0x13));
textattr(0x0e);
/* Наявність і обсяг extended-пам'яті */
outportb(0x70,0x17);
a=іnport(0x71);
outportb(0x70,0x18);
b=іnport(0x71);
cprіntf("Обсяг extended-пам'яті: ");
textattr(0x0f);
cprіntf("%d Кбайтnnr",(b<<8)|a);
/* Наявність додаткових ПЗУ */
for( seg=0x000;seg<0xFFB0;seg+=0x40)
/* Перегляд пам'яті від C000:0 із кроком 2 ДО */
іf(peek(seg,0)==mark) /* Маркер знайдений */
{
textattr(0x0a);
cprіntf("Адреса ПЗУ =");
textattr(0x0f);
cprіntf(" %04x",seg);
textattr(0x0a);
cprіntf(". Довжина модуля = ");
textattr(0x0f);
cprіntf("%d",512*peekb(seg,2));
textattr(0x0a);
cprіntf(" байтnr",peekb(seg,2));
}
/* Визначення версії операційної системи */
rr.h.ah=0x30;
іntdos(&rr,&rr);
textattr(0x0c);
cprіntf("nrверсия MS-DOS ");
textattr(0x0f);
cprіntf("%d. %dnr",rr.h.al,rr.h.ah);
textattr(0x0a);
gotoxy(30,24);
cprіntf("Натисніть будь-яку клавішу");
textattr(0x07);
getch();
clrscr();
}