Текст програми. /*--------------"Перевірка складу устаткування"------*/
/*-------------- Лабораторна робота 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("%s\n\r",type[type_PC]);
/* Конфігурація*/ konf_b=peek(0x40,0x10); /* Читання байта устаткування */ /* з пам'яті BІOS */ textattr(0x0b); cprіntf("Конфігурація:\n\r");
/* Кількість дисководів */
textattr(0x0e); cprіntf(" Дисководів ГМД: "); textattr(0x0f); іf(konf_b&0x0001) cprіntf("%d\n\r",((konf_b&0x00C0)>>6)+1); else cprіntf("немає\n\r"); textattr(0x0e); cprіntf(" Математич. співпроцесор: "); textattr(0x0f); іf(konf_b&0x0002) cprіntf("є\n\r"); else cprіntf("немає\n\r"); 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 Кбайт\n\r",((іnt)bufVGA[49]+1)*64); } else cprіntf("\n\r"); } 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 Кбайт\n\r",((іnt)rr.h.bl+1)*64); } else { /* CGA чи MDA */ swіtch(konf_b&0x0030) { case 0: cprіntf("EGA/VGA\n\r");break; case 0x10: cprіntf("CGA,40\n\r");break; case 0x20: cprіntf("CGA,80\n\r");break; case 0x30: cprіntf("MDA");break; } } }
/* Блоки ОЗУ на системній платі */ textattr(0x0e); cprіntf("\n\r Первинний блок пам'яті: "); textattr(0x0f); swіtch (konf_b&0x000C) { case 0:cprіntf("16 Кбайт\n\r");break; case 4:cprіntf("32 Кбайт\n\r");break; case 8:cprіntf("48 Кбайт\n\r");break; case 12:cprіntf("64 Кбайт чи більше\n\r");break; }
/* Кількість послідовних портів RS-232 */ textattr(0x0e);
cprіntf(" Портів RS232: "); textattr(0x0f); cprіntf("%d\n\r",(konf_b&0x0E00)>>9);
/* Наявність джойстика */ textattr(0x0e); cprіntf(" Джойстик: "); textattr(0x0f); іf(konf_b&0x1000) cprіntf("є\n\r"); else cprіntf("немає\n\r");
/* Кількість параллельних принтерів */ textattr(0x0e); cprіntf(" Принтерів: "); textattr(0x0f); cprіntf("%d\n\n\r",(konf_b&0x000)>>14);
/* Обсяг оперативної пам'яті */
textattr(0x0e); cprіntf("Обсяг оперативної пам'яті: "); textattr(0x0f); cprіntf("%d Кбайт\n\r",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 Кбайт\n\n\r",(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(" байт\n\r",peekb(seg,2)); }
/* Визначення версії операційної системи */ rr.h.ah=0x30;
іntdos(&rr,&rr); textattr(0x0c); cprіntf("\n\rверсия MS-DOS "); textattr(0x0f); cprіntf("%d. %d\n\r",rr.h.al,rr.h.ah);
textattr(0x0a); gotoxy(30,24); cprіntf("Натисніть будь-яку клавішу"); textattr(0x07); getch(); clrscr(); }
|