Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Текст программы. /*----Лабораторная работа N4-----------------*/
/*----Лабораторная работа N4-----------------*/ /*----"Проверка состава оборудования"--------*/
/* Подключение стандартных заголовков */ #include <dos.h> #include <conio.h> #include <stdio.h>
/*-----------------------------------------------*/ void main() { unsigned char type_PC, /* Тип компьютера */ a,b; /* Переменные для определения */ /* характеристик памяти ПЭВМ */ unsigned int konf_b; /* Байт конфигурации из BIOS */ char *type[]={"AT","PCjr","XT","IBM PC","unknown"}; unsigned 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, кол., анал.","неизвестный тип", "непредусмотренный код"}; unsigned int j; /* Вспомогательная переменная */ unsigned int seg; /* Сегмент ПЗУ */ unsigned int mark=0xAA55; /* Маркер ПЗУ */ unsigned char bufVGA[64]; /* Буфер данных VGA */ union REGS rr; struct SREGS sr;
textbackground(0); clrscr(); textattr(0x0a); cprintf("Лабораторная работа N5"); cprintf("\nПроверка состава оборудования");
/* Определения типа компьютера */ type_PC=peekb(0xF000,0xFFFE); if((type_PC-=0xFC)>4) type_PC=4; textattr(0x0b); cprintf("\nТип компьютера: "); textattr(0x0f); cprintf("%s\n\r",type[type_PC]);
/* Конфигурация*/ konf_b=peek(0x40,0x10); /* Чтение байта оборудования */ /* из памяти BIOS */ textattr(0x0b); cprintf("Конфигурация:\n\r");
/* Количество дисководов */
textattr(0x0e); cprintf(" Дисководов ГМД: "); textattr(0x0f); if(konf_b&0x0001) cprintf("%d\n\r",((konf_b&0x00C0)>>6)+1); else cprintf("нет\n\r"); textattr(0x0e); cprintf(" Математич. сопроцессор: "); textattr(0x0f); if(konf_b&0x0002) cprintf("есть\n\r"); else cprintf("нет\n\r"); textattr(0x0e); cprintf(" Тип дисплейного адаптера: "); textattr(0x0f);
/* Определение активного адаптера */ /* Предположим наличие VGA */ rr.h.ah=0x1a; rr.h.al=0; int86(0x10,&rr,&rr); if(rr.h.al==0x1a) /* Поддерживается функция 1Ah */ { /* прерывания 10h */ for(j=0;j<12;j++) if(rr.h.bl==typ1A[j]) break; cprintf("%s",types1A[j]);
if(j>0 && j<12) { rr.h.ah=0x1b; rr.x.bx=0; sr.es=FP_SEG(bufVGA); rr.x.di=FP_OFF(bufVGA); int86x(0x10,&rr,&rr,&sr); cprintf(", %d Кбайт\n\r",((int)bufVGA[49]+1)*64); } else cprintf("\n\r"); } else { /* Предположим наличие EGA */ rr.h.ah=0x12; rr.h.bl=0x10; int86(0x10,&rr,&rr); if(rr.h.bl!=0x10) /* Поддерживается функция 12h */ { /* прерывания 10h */ cprintf("EGA"); if(rr.h.bh) cprintf(" моно"); else cprintf(" кол."); cprintf(", %d Кбайт\n\r",((int)rr.h.bl+1)*64); } else { /* CGA или MDA */ switch(konf_b&0x0030) { case 0: cprintf("EGA/VGA\n\r");break; case 0x10: cprintf("CGA,40\n\r");break; case 0x20: cprintf("CGA,80\n\r");break; case 0x30: cprintf("MDA");break; } } }
/* Блоки ОЗУ на системной плате */ textattr(0x0e); cprintf("\n\r Первичный блок памяти: "); textattr(0x0f); switch (konf_b&0x000C) { case 0:cprintf("16 Кбайт\n\r");break; case 4:cprintf("32 Кбайт\n\r");break; case 8:cprintf("48 Кбайт\n\r");break; case 12:cprintf("64 Кбайт или больше\n\r");break; }
/* Количество последовательных портов RS-232 */ textattr(0x0e);
cprintf(" Портов RS232: "); textattr(0x0f); cprintf("%d\n\r",(konf_b&0x0E00)>>9);
/* Наличие джойстика */ textattr(0x0e); cprintf(" Джойстик: "); textattr(0x0f); if(konf_b&0x1000) cprintf("есть\n\r"); else cprintf("нет\n\r");
/* Количество параллельних принтеров */ textattr(0x0e); cprintf(" Принтеров: "); textattr(0x0f); cprintf("%d\n\n\r",(konf_b&0xC000)>>14);
/* Объем оперативной памяти */
textattr(0x0e); cprintf("Объем оперативной памяти: "); textattr(0x0f); cprintf("%d Кбайт\n\r",peek(0x40,0x13)); textattr(0x0e);
/* Наличие и объем extended-памяти */ outportb(0x70,0x17); a=inport(0x71); outportb(0x70,0x18); b=inport(0x71); cprintf("Объем extended-памяти: "); textattr(0x0f); cprintf("%d Кбайт\n\n\r",(b<<8)|a);
/* Наличие дополнительных ПЗУ */ for(seg=0xC000;seg<0xFFB0;seg+=0x40) /* Просмотр памяти от C000:0 с шагом 2 К */ if(peek(seg,0)==mark) /* Маркер найден */ { textattr(0x0a); cprintf("Адрес ПЗУ ="); textattr(0x0f); cprintf(" %04x",seg); textattr(0x0a); cprintf(". Длина модуля = "); textattr(0x0f); cprintf("%d",512*peekb(seg,2)); textattr(0x0a);
cprintf(" байт\n\r",peekb(seg,2)); }
/* Определение версии операцийной системы */ rr.h.ah=0x30;
intdos(&rr,&rr); textattr(0x0c); cprintf("\n\rВерсия MS-DOS "); textattr(0x0f); cprintf("%d.%d\n\r",rr.h.al,rr.h.ah);
textattr(0x0a); gotoxy(30,24); cprintf("Нажмите любую клавишу"); textattr(0x07); getch(); clrscr(); } Date: 2015-05-22; view: 571; Нарушение авторских прав |