Изучение структурі и порядка программирования CMOS памяти персональной ПЭВМ

Страницы работы

Содержание работы

Министерство образования  и науки Российской федерации

Государственное образовательное учреждение высшего профессионального образования «Комсомольский-на-Амуре Государственный университет»

Кафедра МОП ЭВМ

Лабораторная работа №2

по дисциплине:

Опирационные Системы

ЧАСТЬ 1

Тема: ОЗУ

Выполнил: Демков А. Н.

Группа: 4ВТ-1

Проверил: Изабеков З.А.

2006

Задание:

изучить структуру и порядок программирования CMOS памяти персональной ПЭВМ и написать модуль, читающий и расшифровывающий все данные CMOS памяти ПЭВМ;

изучить структуру ОЗУ ПЭВМ (в ОС реального режима), разобрать понятия CMA, UMA, HMA, EMA, XMA, EMS, XMS, UMB. Исследовать оперативную память компьютера в ОС реального режима с помощью системных утилит MEM, MSD, программ CHECIT, SI и составить сравнительную таблицу показаний этих программ по всем видам памяти ПЭВМ:

Размер памяти в Бт

Программа

CMA

UMA

HMA

XMA

EMS

XMS

MEM

MSD

SI

CHECIT

            объяснить расхождение в показаниях программ ( если они имеются).

изучить  технологию выделения блоков памяти  ОС реального режима при загрузке и выполнении программ и исследовать ( с помощью отладчика или написанного собственноручно модуля)  цепочку MCB в памяти ПЭВМ.

Текст программы:

#include <stdio.h>

#include <conio.h>

#include <math.h>

int bit[8],cmos[64];

void scan()

{

unsigned port = 0x70;

int value,i;

for(i=0;i<64;i++)

{

outp(port,i);

cmos[i]=inp(0x71);

}

}

void tobit(int a)

{

int i,e;

for (i=0;i<8;i++)

{

e=pow(2,i);

bit[i]=(a&e) >> i;

}

}

void main(void)

{

clrscr();

char *day[7]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

int i;

scan();

printf("Current time:\n");

printf("%s, %02x.%02x.%02x\t",day[cmos[6]-1],cmos[7],cmos[8],cmos[9]);

printf("%02x:%02x:%02x\n",cmos[4],cmos[2],cmos[0]);

printf("\nRTC status register A:\n");

tobit(cmos[10]);

switch (bit[7])

{

case 0: printf("UIP flag set to OK\n");break;

case 1: printf("UIP flag set to NOK\n");break;

}

printf("22-stage divider set to %d%d%d\n",bit[6],bit[5],bit[4]);

printf("Rate selector set to %d%d%d%d\n",bit[3],bit[2],bit[1],bit[0]);

printf("\nRTC status register B:\n");

tobit(cmos[11]);

switch (bit[7])

{

case 0: printf("UIP flag set to OK\n");break;

case 1: printf("UIP flag set to NOK\n");break;

}

switch (bit[6])

{

case 0: printf("Periodic int. disabled\n");break;

case 1: printf("Periodic int. enabled\n");break;

}

switch (bit[5])

{

case 0: printf("Alarm int. disabled\n");break;

case 1: printf("Alarm int. enabled\n");break;

}

switch (bit[4])

{

case 0: printf("Update-ended int. disabled\n");break;

case 1: printf("Update-ended int. enabled\n");break;

}

switch (bit[3])

{

case 0: printf("Square wave disabled\n");break;

case 1: printf("Square wave enabled\n");break;

}

switch (bit[2])

{

case 0: printf("Date mode is BCD\n");break;

case 1: printf("Date mode is binary\n");break;

}

switch (bit[1])

{

case 0: printf("12-hr mode\n");break;

case 1: printf("24-hr mode\n");break;

}

switch (bit[0])

{

case 0: printf("Standart time\n");break;

case 1: printf("Daylight time\n");break;

}

printf("\nRTC status register C:\n");

tobit(cmos[12]);

printf("Read-only interrupt status bits:");

for(i=7;i>=0;i--) printf(" %d",bit[i]);

printf("\n\nRTC status register D:\n");

tobit(cmos[13]);

switch (bit[7])

{

case 0: printf("Battery is dead\n");break;

case 1: printf("Battery is OK\n");break;

}

printf("\nPress any key to continue...");

getch();

clrscr();

printf("POST diagnostics status byte:\n");

tobit(cmos[14]);

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
3 Mb
Скачали:
0