Форум программистов, компьютерный форум CyberForum.ru

Проверка оборудования, управление клавиатурой - C++

Восстановить пароль Регистрация
 
aoo2005
 Аватар для aoo2005
0 / 0 / 0
Регистрация: 23.04.2011
Сообщений: 24
20.11.2011, 11:37     Проверка оборудования, управление клавиатурой #1
Здраствуйте! Помогите с заданием.

Задание 1. Для компьютера на своем рабочем месте определить:
• тип компьютера;
• конфигурацию оборудования;
• объем оперативной памяти;
• наличие и объем расширенной памяти;
• наличие дополнительных ПЗУ;
• версию операционной системы.
Задание 2. Разработать программу обработки прерывания от клавиатуры, которая должна:
• распознавать нажатие "горячей" комбинации клавиш и реагировать на него звуковым сигналом;
• при первом нажатии "горячей" комбинации переходить в режим блокировки ввода заданной клавиши, при втором - отменять этот режим;
• системная обработка всех других клавиш нарушаться не должна.
Программа использует, так называемый, список оборудования - 2-байтное слово в области данных BIOS по адресу 0040:0010. Назначение разрядов списка оборудования такое:
Биты Содержимое
0 установлен в 1, если есть НГМД (см.разряды 6, 7)
1 установлен в 1, если есть сопроцессор
2,3 число 16-Кбайтних блоков ОЗУ на системной плате
4,5 код видеоадаптера: 11 - MDA, 10 - CGA, 80 колонок,
01 - CGA, 40 колонок, 00 - другой
6,7 число НГМД-1 (если в разряде 0 единица)
8 0, если есть канал ПДП
9,10,11 число последовательных портов RS-232
12 1, если есть джойстик
13 1, если есть последовательный принтер
14,15 число параллельных принтеров


Вот, что я нахимичил

CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/*--------------"Перевірка складу устаткування"-------------і*/
/* Підключення стандартних заголовків */
#і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();
}
 
Перевірка складу устаткування
Тип комп'ютера: AT
Конфігурація:
Дисководів ГМД: 2
Математич. співпроцесор: є
Тип дисплейного адаптера: VGA, кіл., анал., 256 Кбайт
Первинний блок пам'яті: 16 Кбайт
Портів RS232: 2
Джойстик: немає
Принтерів: 1
Обсяг оперативної пам'яті: 639 Кбайт
Обсяг extended-пам'яті: 384 Кбайт
Адреса ПЗУ = c000. Довжина модуля = 24576 байт
Версія MS-DOS 6.205.2

P.S Извините за украинский)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2011, 11:37     Проверка оборудования, управление клавиатурой
Посмотрите здесь:

C++ Работа с клавиатурой
Работа с клавиатурой в графическом режиме C++
Работа с клавиатурой. C++
C++ Работа с клавиатурой
C++ В цехе установлено 15 единиц оборудования, каждое из которых отработало срок (от 5 до 15 лет), известна стоимость каждой единицы оборудования
проверка оборудования, управление клавиатурой с++ C++
C++ проверка оборудования, управление клавиатурой с++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 08:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru