
- •Введение
- •Лабораторная работа № 1. Создание программы определения характеристик центрального процессора.
- •Определение параметров процессора на аппаратном уровне.
- •Лабораторная работа № 2.
- •Конфигурация персонального компьютера
- •Cmos-память и конфигурация компьютера
- •32H Текущее столетие
- •Использование bios для определения конфигурации
- •Лабораторная работа 3. Тестирование оптических накопителей.
- •Использование I/o Control Codes.
- •Использование Windows Management Instrumentation (wmi).
- •Порты контроллера накопителей на гибких дисках
- •Порт 3f2h.
- •Порт 3f4h.
- •Команды управления накопителями
- •Перечень команд контpоллеpа нгмд
- •Структура байтов состояния
- •Формат дорожки
- •Отличия контроллера для ат-подобных пэвм
- •Порт 3f7h.
- •Лабораторная работа № 5. Диагностика контроллера накопителей на жестких дисках.
- •Контроллер жестких дисков для хт-подобных пэвм
- •Порты ввода-вывода
- •Порт 320h.
- •Порт 321h.
- •Порт 322h.
- •Порт 323h.
- •Общий формат команды и терминология
- •Описание команд Проверка готовности накопителя (класс 0, опкод 0).
- •Рекалибровать (класс 0, опкод 1).
- •Запрос состояния (класс 0, опкод 3).
- •Форматирование накопителя (класс 0, опкод 4).
- •Проверка секторов (класс 0, опкод 5).
- •Форматирование дорожки (класс 0, опкод 6).
- •Форматирование дефектной дорожки (класс 0, опкод 7).
- •Чтение секторов (класс 0, опкод 8).
- •Запись секторов (класс 0, опкод 0Ah).(*)
- •Поиск цилиндра по номеру (класс 0, опкод 0Ch).(*)
- •Чтение внутреннего озу контроллера (класс 0, опкод 0Eh).(*)
- •Запись внутреннего озу контроллера (класс 0, опкод 0Fh).(*)
- •Диагностика внутреннего озу контроллера (класс 7,опкод 0).(*)
- •Тест устройства (класс 7, опкод 3).
- •Расширенный тест контроллера (класс 0, опкод 4).
- •Считывание без контроля (класс 7, опкод 5).
- •Запись без контроля (класс 7, опкод 6).
- •Разметка диска
- •Контроллер жестких дисков для ат-подобных пэвм
- •Описание портов ввода-вывода Порт 1f0h
- •Порт 1f1h.
- •Система команд
- •Лабораторная работа №6. Программное тестирование портов для работы с клавиатурой
- •Аппаратное прерывание клавиатуры
- •Средства bios для работы с клавиатурой
- •Чтение символа с ожиданием
- •Проверка буфера на наличие в нем символов
- •Получение состояния переключающих клавиш
- •Установка временных характеристик клавиатуры
- •Запись символов в буфер клавиатуры
- •Чтение символа с ожиданием для 101-клавишной клавиатуры
- •Проверка буфера на наличие в нем символов для 101-клавишной клавиатуры
- •Получение состояния переключающих клавиш для 101-клавишной клавиатуры
- •Лабораторная работа № 7. Тестирование и контроль оперативной памяти.
- •Алгоритм определения объёма оперативной памяти.
- •Сущность тестирования памяти.
- •Алгоритм диагностирования памяти в тесте Memtest86.
- •Лабораторная работа № 8. Программирование принтера. Цель работы: изучение методов программирования принтера.
- •Средства ms-dos для работы с принтером
- •Программирование режимов принтера
- •Установка атрибутов/цветов символов.
- •Сдвиг экрана и страницы.
- •Вертикальный сдвиг текстового экрана.
- •Сдвиг текстового экрана горизонтально.
- •Переключение между текстовыми страницами.
- •Сдвиг между страницами текста.
- •Использование wmi.
- •Аналогичным образом могут использоваться свойства и других классов.
Сдвиг между страницами текста.
Поскольку страницы текста прилегают друг к другу в видеобуфере, то небольшой текстовый массив может целиком помещаться в этой памяти. В этом случае текст сдвигаться вверх и вниз по экрану не передвигаясь реально в буфере. Вместо этого экран начинает показывать содержимое буфера, начиная с различных точек и тем самым создавая иллюзию сдвига. Этот метод называется аппаратным сдвигом.
Аппаратный сдвиг достигается за счет изменения стартового адреса дисплея, который является числом, указывающим на символ в видеобуфере, который будет выводиться в левом верхнем углу экрана. Добавление 80 к этому числу "сдвигает" весь экран на одну строку вверх, а вычитание 80 - на одну строку вниз. В режиме с 40 символами в строке надо вместо 80 прибавлять или вычитать 40.
Отметим, что регистр стартового адреса не считает байты атрии бутов, поэтому Вы должны вычислять адреса памяти по-другому, чем при прямом отображении в память. Имейте также ввиду, что несмотря на наличие разрывов памяти между границами страниц (96 байтов между 80-символьными страницами и 48 байтов между 40-символьными страницами) микросхема 6845 пропускает эти области и сдвиг непрерывно происходит с одной страницы на следующую. Аппаратный сдвиг происходит настолько быстро, что Вам может оказаться необходимым вставить процедуру задержки, чтобы пользователь имел возможность увидеть насколько сдвинулся экран.
BIOS хранит текущее значение регистра стартового адреса в переменной в своей области данных. Эта двухбайтная переменная расположена по адресу 0040:004EH.
Использование wmi.
Windows Management Instrumentation (далее WMI) – это масштабируемая система управления инфраструктурой которая использует единый, стандартизированный, расширяемый, объектно-ориентированный интерфейс. WMI предоставляет программисту взаимодействовать с системой управления информацией и прилежащими WMI API.
При выборе данной технологии, для получения информации о видеорежимах используется множество классов, например: Win32_DisplayConfiguration, Win32_DisplayControllerConfiguration, Win32_VideoSettings, Win32_VideoController, Win32_VideoConfiguration, Win32_DesktopMonitor. Рассмотрим те сведения, которые предоставляет каждый из классов.
Использование данной технологии наиболее просто реализуемо при использовании языка программирования Visual Basic Script. Ниже представлен пример использования класса Win32_VideoConfiguration и получающий информацию о текущем расширении:
Option Explicit
Dim objWMI
Dim colCD
Dim objCD
Set objWMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
Set colCD = objWMI.ExecQuery("Select * from Win32_VideoConfiguration")
For each objCD in colCD
MsgBox objCD.HorizontalResolution & "*" & objCD.VerticalResolution
Next
Аналогичным образом могут использоваться свойства и других классов.
1. Win32_DisplayConfiguration
Класс Win32_DisplayConfiguration предоставляет информацию о установленном дисплее.
class Win32_DisplayConfiguration : CIM_Setting{
uint32 BitsPerPel;
string Caption;
string Description;
string DeviceName;
uint32 DisplayFlags;
uint32 DisplayFrequency;
uint32 DitherType;
string DriverVersion;
uint32 ICMIntent;
uint32 ICMMethod;
uint32 LogPixels;
uint32 PelsHeight;
uint32 PelsWidth;
string SettingID;
uint32 SpecificationVersion;
};
2. Win32_DisplayControllerConfiguration
Класс Win32_DisplayControllerConfiguration предоставляет информацию о контроллере установленном в системе.
class Win32_DisplayControllerConfiguration : CIM_Setting{
uint32 BitsPerPixel;
string Caption;
uint32 ColorPlanes;
string Description;
uint32 DeviceEntriesInAColorTable;
uint32 DeviceSpecificPens;
uint32 HorizontalResolution;
string Name;
sint32 RefreshRate;
uint32 ReservedSystemPaletteEntries;
string SettingID;
uint32 SystemPaletteEntries;
uint32 VerticalResolution;
string VideoMode;
};
3. Win32_VideoSettings
Предоставляет информацию о видео контроллере и видео-настройках которые могут быть установлены.
class Win32_VideoSettings : CIM_VideoSetting
{
Win32_VideoController ref Element;
CIM_VideoControllerResolution ref Setting;
};
4. Win32_VideoController
Предоставляет информацию о возможностях видеоконтроллера установленного в системе.
class Win32_VideoController : CIM_PCVideoController{
uint16 AcceleratorCapabilities[];
string AdapterCompatibility;
string AdapterDACType;
uint32 AdapterRAM;
uint16 Availability;
string CapabilityDescriptions[];
string Caption;
uint32 ColorTableEntries;
uint32 ConfigManagerErrorCode;
boolean ConfigManagerUserConfig;
string CreationClassName;
uint32 CurrentBitsPerPixel;
uint32 CurrentHorizontalResolution;
uint64 CurrentNumberOfColors;
uint32 CurrentNumberOfColumns;
uint32 CurrentNumberOfRows;
uint32 CurrentRefreshRate;
uint16 CurrentScanMode;
uint32 CurrentVerticalResolution;
string Description;
string DeviceID;
uint32 DeviceSpecificPens;
uint32 DitherType;
datetime DriverDate;
string DriverVersion;
boolean ErrorCleared;
string ErrorDescription;
uint32 ICMIntent;
uint32 ICMMethod;
string InfFilename;
string InfSection;
datetime InstallDate;
string InstalledDisplayDrivers;
uint32 LastErrorCode;
uint32 MaxMemorySupported;
uint32 MaxNumberControlled;
uint32 MaxRefreshRate;
uint32 MinRefreshRate;
boolean Monochrome;
string Name;
uint16 NumberOfColorPlanes;
uint32 NumberOfVideoPages;
string PNPDeviceID;
uint16 PowerManagementCapabilities[];
boolean PowerManagementSupported;
uint16 ProtocolSupported;
uint32 ReservedSystemPaletteEntries;
uint32 SpecificationVersion;
string Status;
uint16 StatusInfo;
string SystemCreationClassName;
string SystemName;
uint32 SystemPaletteEntries;
datetime TimeOfLastReset;
uint16 VideoArchitecture;
uint16 VideoMemoryType;
uint16 VideoMode;
string VideoModeDescription;
string VideoProcessor;
};
5. Win32_VideoConfiguration
Предоставляет информацию о видео подсистеме.
class Win32_VideoConfiguration : CIM_Setting{
uint32 ActualColorResolution;
string AdapterChipType;
string AdapterCompatibility;
string AdapterDACType;
string AdapterDescription;
uint32 AdapterRAM;
string AdapterType;
uint32 BitsPerPixel;
string Caption;
uint32 ColorPlanes;
uint32 ColorTableEntries;
string Description;
uint32 DeviceSpecificPens;
datetime DriverDate;
uint32 HorizontalResolution;
string InfFilename;
string InfSection;
string InstalledDisplayDrivers;
string MonitorManufacturer;
string MonitorType;
string Name;
uint32 PixelsPerXLogicalInch;
uint32 PixelsPerYLogicalInch;
uint32 RefreshRate;
string ScanMode;
uint32 ScreenHeight;
uint32 ScreenWidth;
string SettingID;
uint32 SystemPaletteEntries;
uint32 VerticalResolution;
};
6. Win32_DesktopMonitor.
Предоставляет информацию о устройстве вывода информации присоединенного к компьютеру.
class Win32_DesktopMonitor : CIM_DesktopMonitor{
uint16 Availability;
uint32 Bandwidth;
string Caption;
uint32 ConfigManagerErrorCode;
boolean ConfigManagerUserConfig;
string CreationClassName;
string Description;
string DeviceID;
uint16 DisplayType;
boolean ErrorCleared;
string ErrorDescription;
datetime InstallDate;
boolean IsLocked;
uint32 LastErrorCode;
string MonitorManufacturer;
string MonitorType;
string Name;
uint32 PixelsPerXLogicalInch;
uint32 PixelsPerYLogicalInch;
string PNPDeviceID;
uint16 PowerManagementCapabilities[];
boolean PowerManagementSupported;
uint32 ScreenHeight;
uint32 ScreenWidth;
string Status;
uint16 StatusInfo;
string SystemCreationClassName;
string SystemName;
};
Варианты лабораторных работ:
№ Варианта |
Задание |
1 |
Вывод поддерживаемых видеорежимов |
2 |
Определение AdapterType |
3 |
Определение AdapterRAM |
4 |
Определение CurrentNumberOfColors |
5 |
Определение RefreshRate |
6 |
Определение PowerManagementCapabilities |
7 |
Определение VideoProcessor |
8 |
Определение DriverVersion |
9 |
Определение VideoMode |
0 |
Определение VideoMemoryType |
Введение 3
Лабораторная работа № 1. 4
Создание программы определения характеристик центрального процессора. 4
Лабораторная работа № 2. 11
Программирование BIOS\CMOS. 11
CMOS-память и конфигурация компьютера 16
Использование BIOS для определения конфигурации 23
Лабораторная работа 3. 27
Тестирование оптических накопителей. 27
ASPI 27
Использование I/O Control Codes. 28
Использование Windows Management Instrumentation (WMI). 29
Лабораторная работа № 4. 34
Программное тестирование контроллера накопителей на гибких дисках 34
Отличия контроллера для АТ-подобных ПЭВМ 44
Лабораторная работа № 5. 48
Диагностика контроллера накопителей на жестких дисках. 48
Лабораторная работа №6. 64
Программное тестирование портов для работы с клавиатурой 64
Лабораторная работа № 7. 78
Тестирование и контроль оперативной памяти. 78
Лабораторная работа № 8. 87
Программирование принтера. 87
Цель работы: изучение методов программирования принтера. 87
Лабораторная работа № 9. 98
Определение характеристик и параметров видеоадаптера. 98