русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Тест проверки регистров МП в реальном режиме

Регистры МП: АХ – аккумулятор
ВХ – адрес базы данных
СХ – счетчик циклов
DX – адреса внешних устройств ( 64К )
SI, DI – смещение адреса
ES – сегмент данных
Содержимое этих 7 регистров можно изменить в реальном режиме с помощью ассемблерной вставки.
Далее: SP, DP – указатели для стека
SS – сегмент стека
DS - сегмент данных
Содержимое этих 4-х регистров нужно запоминать в процессе выполнения операций, связанных с их использованием.

АЛГОРИТМ ТЕСТИРОВАНИЯ РЕГИСТРОВ МП

1) Выбираем константы для тестирования: К0, К1, К2 (К2`).
2) Организуем цикл по пересылке констант из регистра в регистр, со сравнением, на выходе последнего регистра цепочки; с константой тестирования.
3) Вывод результатов в виде: константы ( К0, К1, К2) прошли или нет.

Реализация на Pascal в MS-DOS.

{$G+} // включение ассемблера МП 80286
Program test_RG_CPU;
Ввести дополнительные переменные для промежуточного хранения 4-х регистров:
WSS для SS; WBP для BP; WSP для SP; WDS для DS.
Ассемблерная вставка:
asm
1) запрет на прерывание ( 9 бит регистра флагов)
cli
2) запись всех регистров
pusha
3) запись констант тестирования в АХ
mov AX, <константа>
4) mov CX, SS        *
mov WSS, CX        *
mov WBP, BP          *  сохранение SS, BP, SP, DS
mov WSP, SP      *
mov CX, DS    *

mov DS, AX         *
mov BX,DS                *  восстановление DS
mov DS,CX          *


mov ES, BX    *
mov CX, ES          *
mov SS, CX                *
mov DX, SS                      *  движение констант по регистрам МП
mov SP, DX                    *
mov BP, SP                *
mov SI, BP            *
mov DI, SI      *

mov SP, WSP   *
mov BP, WBP     *
mov BX, WSS       *  восстановление SP, BP, SS
mov SS, BX      *

xor AX, DI – сумма по модулю 2, входа и выхода цепочки
mov BUF, AX – записать результат в переменную BUF ( 0 – нет ошибки, не 0 -error)

pop a  - восстановление регистров из стека
sti  - разрешение прерывания регистров флага
конец asm вставки
анализ на ошибки
если BUF = 0, тогда нет ошибки, иначе ошибка.

 

ТЕСТИРОВАНИЕ БАТАРЕИ ПИТАНИЯ И КОНТРОЛЬНОЙ СУММЫ CMOS RTC

CMOS хранит конфигурацию ПК в REAL MODE.
Порт 70h CMOS предназначен для   установления адреса регистра CMOS. Порт 71h предназначен для чтения – записи байта в – из регистра CMOS, адрес которого записан в порт 70h.
Регистры CMOS от 10h до 2Dh охвачены  контрольной сумой ( в 2Eh и в 2Fh -16 разрядной).
Для проверки батарейки проверяется 7 бит (старший) в регистре 8Dh, если там 1, то нет ошибки, иначе - не исправна.
Фрагменты программы для тестирования батарейки и контрольной суммы:
батарейка: port[$70]:= $8D; //адрес регистра контроля батарейки
                     if (port[$71] and $80) = $80 then OK else “селабатарейка
проверка контрольной суммы:
S:=0 ; // начальное значение контрольной суммы
fori:= $10 to $2Ddo    //цикл по адресному пространству CMOS –  //охваченному контрольной суммой
begin
port[$70]:=i; //запись в порт адреса очередного регистра
S:= S+port[$71]; // суммирование содержимого адреса очередного //регистра с предыдущим
end;

 

проверка контрольной суммы:
port$70:=$2E; - адрес старшего байта контрольной суммы
DHI:= port$71 – читаем старший байт контрольной суммы
port$70:=$2F – адрес младшего байта контрольной суммы
DLO:= port$71 – читаем младший байт контрольной суммы
if (HI (S)=DHI) and ( LO (S) = DLO) then OK else Error;
где HI- получение старшего байта от слова S
LO – получение младшего байта от слова S
Пример результата: S = 1780
DHI = 6
DLO = 244
проверка: 6* 256 + 244 = 1780

 

ТЕСТИРОВАНИЕ ДОЗУ В РЕАЛЬНОМ РЕЖИМЕ

Объем ДОЗУ в Real Mode = 640 KБ; все остальное:  DOS, видео система и другое.
Алгоритм:
1) 640 К разделяется на 10 сегментов ( сегмент = 64 К )
2) Каждый сегмент разбивается на 64 блока  по 1 К. Тест выполняется поблочно.
3) Пропускаются первые 16 К, т.к в них хранятся коды программы
4) Сохраняем в буфере 1 К + проверяемого ДОЗУ.
move ( mem[k:i*1024],buf,1024);
пересылаем в буфер 1 К, где: mem - читает побайтно  память; k – номер сегмента; i- номер блока, buf – переменная для буфера размером 1024 байта.
asm
cli –запрет на прерывание
end;

1) запись К0, К1, К2 в 1К
for j:=0 to 511 do
memW [ k : i * 1024 + j * 2 ] : =  константа (слово)
2) проверка: чтение из памяти и сравнение с эталоном:
if   memW [ k: i *1024 +j*2]  константе - ошибка
3) восстановление 1К
move ( buf, mem[k:i*1024],1024)
sti – отмена запрета
end;
И так по всем блокам и всем сегментам.

 

ТЕСТИРОВАНИЕ КЛАВИАТУРЫ (ВКЛЮЧЕНИЕ ВЫКЛЮЧЕНИЕ СВЕТОДИОДОВ)

Клавиатура обслуживается собственным ПО. Имеет системные порты и две микроЭВМ ( 8048, 8042). Перечень команд для включения и выключения светодиодов:
port$60:=$ED; // команда управления светодиодами
delay(1000);   // задержка 1 сек.
port$60:=$2; // включение NumLock
delay(); // задержка
port$60: = $ED;
port$60:= 0; //выключить любой включенный светодиод

Коды включения других светодиодов: CapsLock = $04; ScrollLock = $01;

 

ТЕСТ РЕГЕНЕРАЦИИ ПАМЯТИ

При регенерации ДОЗУ ( от 8 до 64 мс) сигнал о регенерации поступает в четвертый бит 61h порта:
t:= false;
repeat
if (port[$61] and $ 10) < > 0 then t:= true;
until t; - выход из цикла при начале регенерации
k:=0; t:=false;
repeat
if ( port[$61] and $10 ) = 0 then t:=true;
k:=k+1;
until t; - выход по окончании регенерации, которая длилась k- тактов.

Просмотров: 15806


Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.