Лабораториялық жұмыс №10.

Тақырып: Дербес компьютер конфигурациясы.

Жұмыс мақсаты: ДК конфигурациясын анықтайтын бағдарламаны іске асыру.

Теориялық мәліметтер:

IBM PC типінің анықтамасы.

IBM PC әртүрлі типтерінің арасында сыйысушылық проблемалары болады. Бағдарлама IBM PC кез келгенімен жұмыс істей алу үшін, оның барлық мүмкіншілігін қолданып, ол қайсыда толтырылған машина типін анықтай білуі үшін қажет. Бұл ақпарат жадтың екінші соңғы байтында FFFFE в ROM-BIOS адреспен болады, келесі маңызды сандардылардың қолдануымен:

Kомпьютер Kод

PC FF

XT FE

PCjr FD

AT FC

Ассемблер тілінде:

;--- Компьютер типін анықтау:

MOV AX,0F000H ; ES көрсетеді ТЖҚ

MOV ES,AX ;

MOV AL,ES:[0FFFEH] ; байтты аламыз

CMP AL,0FDH ; бұл PCjr?

JE INITIALIZE_JR ; инициализацияға өтеміз

Дисплей адаптерлерінің типін және санын анықтау.

Бағдарламаға қажетті ақпарат бар бола алады, ол жүйеде монохромдық адаптермен жұмыс істейме, түрлі-түсті гравикалық картамен немесе EGA, сонымен қатар екінші адаптер барысы туралы. Жабдықтау статус байты, ROM-BIOS берілгендер облыста 0040:0010 адресімен сақталынған хабарлайды, 1 ауыстырып қосқыш орнатуды, ол карталардың қайсысы активті екенін көрсетеді. монохромдықтың карталар үшін 11 мәні, түрлі түсті карталар 80*25 үшін - 10, 01 - түрлі түсті карталар 40*25 үшін және 00 - EGA үшін. Бірақ EGA барыда биттерді өте жақсы 00 мәнімен орната алады, оның өзіне меншікті ауыстырып қосқыштардың орнатуына байланысты. Сондықтан EGA барысын алдымен басқа құралдармен орнатуға тиісті, ал содан соң, егер жоқ болса, онда берілген BIOS активті түрлі түсті немесе монохромдық адаптер анықтайды. EGA барысы тексеруіне арналған 0040:0087 адресімен байт оқып шығу керек. Егер ол 0 тең болса, онда EGA жоқ болады. Егер бұл байт нөлсіз болса, онда бит 3=0, EGA активті адаптер болып келеді, ал егер ол 1 тең болса, онда екінші адаптер активті болады.

EGA қатысаса, онда монохромдық немесе түрлі түсті адаптер бары тексеруі 6845 микросхема курсор адрестер регистрге мағына жазуымен жүзеге асады және мағына келесі оқулары және тексерудің олардың сәйкес келуге. Монохромдық карталардың үшін 0FH портын 3B4H жіберіңіздер, курсор регистрге көрсету үшін, ал содан соң 3B5H порты арқылы курсор адресін оқу және жазып қою. Сәйкесінше түрлі түсті карталар үшін 3D4H және 3D5H. Қашан карта жоқ болады, онда порт 0FFH мағынасын қайтарып береді; бірақ бұл сондықтан мағына регистрде бола алады, онда – бұл мағынаға қарапайым тексеру жеткіліксіз.

EGA барысы жауап талап етілетін қосарлы екі сұрақ болады: оның картасында қанша жад болады және монитор қандай типін қосылған? дисплей типін анықтау үшін 1 бит 0040:0087 адреспен тексеріңіздер; қашан ол орнатылған кезед, онда монохромдық дисплей қосылған, ал қашан ол нөлге тең болса – онда ол түрлі түсті. Егер сіздің бағдарламаңыз түрлі түсті графикалық режимде 350 жол қолданса, онда IRGB немесе R'G'B'RGB дисплейдің қосылғанын анықтау керек, онда соңғы аббревиатура түрлі түсті дисплей IBM сәйкес келеді. Бұл EGA картасына төрт ауыстырып қосқыштардың орнатуымен анықталады. Бұл ауыстырып қосқыштардын орнату CL қайтарады, 12Н функцияға айналдыру жанында үзіліс 10Н. Төрткіші биттердің тізбегі 0110 болу керек түрлі түсті дисплейіне жақсарту болады. Бұл функция EGA картасында ауыстырып қосқыштардың төртеуіндерінің құруымен анықталады мынау соңғы аббревиатура IBM .. Анау жадты хабарлайды. Ол BL қайтарады, 0 тұратын 64К үшін,1 - 128 үшін, 2 - 192 үшін және 3 - толық 256К 56 жадтың дисплей үшін.

;--- Активті адаптер анықтамасы:

MOV AX,40H ;ES көрсетеді BIOS берілгендер облысына

MOV ES,AX ;

MOV AL,ES:[87H] ;EGA барысын тексереміз

CMP AL,0 ;

JE NO_EGA ; егер 0040:0087 = 0, онда EGA жоқ

TEST AL,00001000B ;EGA бар, 3 бит тексереміз

JNZ EGA_NOT_ACTIVE;егер бит 3=1, то EGA активті емес

.

.

EGA_NOT_ACTIVE:

MOV AL,ES:[10H] ;дисплей статусында байт тексереміз

AND AL,00110000B ;4 және 5 биттерін белгілейміз

CMP AL,48 ;бұл монохромды карта?

JE MONOCHROME ;егер ия болса өту

Дисктік жинақтағыштардың типін және санын анықтау.

АТ басқа барлық машиналарда микросхема регистрі 8255 интерфейс сырттағы ақпараттан тұрады, машинада қанша HГМД болады. Мысалда бұл ақпаратты алу көрсетілген. Диск тиипін анықтайтын ақпарат дисктің (FAT) файлдардың орналастыру кестесінде болады, дисктік кеңістік қолдануын қадағалайды. FAT бірінші байты келесі кодтардан бірінен тұрады:

Kод Диск типі

FF екіжакты, 8 секторлы

FE біржақты, 8 секторлы

FD екіжақты, 9 секторлы

FC біржақты, 9 секторлы

F9 екіжақты, 15 секторлы

F8 бекітілген диск

Файлдардың орналастыру кестесі файл болмайды. Ол DOS немес BIOS функцияларының көмегімен есептелу мүмкін сәйкесінше диск секторымен оқу анықталады.

BIOS берілгендері жүйеде қатты дисктердің санын көрсетпейді, өйткені ауыстырып қосқыштар тек қана иілгіш дисктер үшін арналған. Бірақ сіздер жинақтағыштардың іздеуіне арналған операциялық жүйе көрсетілген функциясын қолдана алаcыздар. Ол 0CDH мағынасын қайтарып береді, орнына айтылған кодтардан бірін, қашан жинақтағыштар жоқ болған кезде. Ол үшін барлық үлкен және үлкен нөмірлі жинақтағыштарды тексеру керек, көрсетілген мағына табылғанға дейін.

АТ жақсы, конфигурация туралы ақпараты жинақтағыш қандай типін айтады. Бұл ақпаратты порттан 71Н адреспен алуға болады, алдын ала регитр нөмір 70H портына жіберіп. HГМД үшін регистр нөмірі 10H тең. Бірінші жинақтағыш туралы ақпарат 7-4 бит, ал екінші - 3-0 бит. Екі жағдайда биттер тізбегі 0000 жинақтағыштығын айтад, 0001 - екі жақты жинақтағышта тығыздықпен 48 жол дюймге, ал 0010 - жинақтағышта үлкен сыйымдылығы туралы айтады (96 жол дюймге). Бекітілген диск туралы ақпарат 12H регистрінде болады және қайтадан 7-4 және 3-0 биттер бірінші және екінші жинақтағыштарға талапқа сай болады. 0000 жинақтағыш жоқ болуына көрсетеді. Басқа 15 мүмкін мағыналары жинақтағыш сыйымдылығын және контрукциясын бейнелеп түсіндіреді. Бұл күрделі кодтар; егер сіздерге қайсыбір ақпарат керек болса, AT техникалық басшылыққа хабарласу керек.

1CH функциясы 21Н үзіліс көрсетілген жинақтағыш туралы ақпаратты қайтарып береді. Жинақтағыш нөмірін DL орналастыру, 0=жинақтағыш үнсіз келісім бойынша, 1=А және т.б. DX оралуында FAT кластерлердің санынан тұрады, AL - кластерде секторлардың санынан тұрады, ал СХ - секторда байттардың санынан, DS:BX байтқа көрсетеді, FAT диск код идентификациясынан тұрады, сәйкесінше кестеге келтірілген. Келесі мысалда А жинақтағыш типі анықталады:

;--- диск типін анықтау

MOV AH,1CH ; MS DOS функция

MOV DL,1 ; А жинақтағышын таңдау

INT 21H ;ақпаратты алу

MOV DL,[BX] ;жинақтағыш типін алу

CMP DL,0FDH ;екіжақты, 9 секторлы?

JE DBL_9 ;және т.б.

BIOS AT, жинақтағыштардың жалпы параметрлері хабарлайтын функцияға ие болады. Бұл функция 8 үзілісі 13H. Ол жинақтағыштардың санын DL қайтарады, DH жинақтағыш жақтарының максималды саны, CL секторлар және СН жолдарының максималды саны, ал қате статус кодын AH жинақтағыш қайтарады.

BIOS AT басқа функциясы жинақтағыш типін қайтарып береді. Бұл функция 15Н үзіліс 13Н, DL жинақтағыш нөмірлері талап етеді, АН кодты қайтып келеді,0=жинақтағыш жоқ, 1=дискета өзгертулердің табылуынсыз, 2=дискета өзгертулердің табылуымен, 3=бекітілген диск. Бекітілген диск жағдайында: CX:DX секторлардың саны 512 байттан қайтарылады.

Шеттегі құрылғылардың типін және санын анықтау.

ROM-BIOS стартында қосылған жабдықтау тексереді, регитр статусына өз тексеру нәтижелері туралы хабарлайды. Бұл регистр екі байтты орынға ие болады, 0040:0010 бастайды. Төменде көрсетілген биттер мәні бәріне машиналарға қатысты:

бит 0 егер 1, онда HГМД қатысады

1 XT,AT:1 = егер мат. сопроцессор (PC,PCjr:қолданылмайды)

2-3 11 = базалық жад 64K (AT: қолданылмайды)

4-5 Активті видеоадаптер (11 = монохромды,

10 = түрлі-түсті 80*25, 01 = түрлі-түсті 40*25)

6-7 сан HГМД (егер бит 0 = 1)

8 PCjr:0 = баар DMA (PC,XT,AT: қолданылмайды)

9-11 коммуникация адаптерлер саны

12 1 = бар ойындық порт (AT: қолданылмайды)

13 PCjr:бар сериялы принтер (PC,XT,AT: қолданылмайды)

14-15 қосылған принтерлер саны

Ақпараттың көп бөлігі шифрланады. Диск жинақтағыштарда ақпарат 0 және 6-7 бит аралығында таратылған. 0 мағынасы 6-7 биттерін көрсетеді, бір дисктік жинақтағыш болады; жинақтағыштардың жоқ болуын білу үшін бит 0 тексеру керек.

Коммуникация порттарының саны BIOS берілгендер облыстан алыну мүмкін. BIOS төрт 2-байтты өрістерді төрт СОМ порттарға дейін базалық адрестерді сақтауына арналған. (MS DOS олардың тек екеуін ғана қолданады). Базалық адрес порттардың ең кіші адресі, порттардың тобына қатысты, коммуникация берілген каналына рұқсат бар болушы. Бұл төрт өрістер 0040:0008 адрестерінен басталады. СОМ1 портына :0008 адресі сәйкес келеді, ал СОМ2-ге 000А. Егер өріс 0 тұрса, онда сәйкесінше порт жоқ болады. Сол сияқты, егер сөз :0008 адреспен нөлден өте жақсы, ал 000А адреспен нөлге, онда коммуникация бір порты болады.

АТ регистрде сырттағы 14Н микросхема конфигурациясы туралы ақпаратты сақтайды. Алдымен 14Н портқа 70H адреспен жазып қойындар, содан кейін регистр мазмұнын 71Н порт арқылы оқып шығыңыздар, Міне бұл регистрдегі биттер мағынасы:

Биттер 7-6 00 = 1 HГМД, 01 = 2 HГМД

5-4 01 = түрлі-түсті дисплейге шығару, 40 жол

10 = түрлі-түсті дисплейге шығару, 80 жол

11 = монохромды дисплейге шығару

3-2 қолданылмайдыв

1 1 = мат. сопроцессор бар

0 0 = жоқ HГМД, 1 = бар HГМД

Үзіліс 11H BIOS статус байтын АХ жабдықтауға қайтарып береді. Мысалда дисктік жинақтағыштардың саны анықталады.

; ---дисктік жинақтағыштардың санын алу:

INT 11H ;статус байтын аламыз

TEST AL,0 ;жинақтағыштар болды ма?

JZ NO_DRIVES ; өту, егер жоқ

AND AL,1100000B ; 5-6 биттерін белгілейміз

MOV CL,5 ;регистр жылжуына дайыгдау

SHR AL,CL ;5 битқа оңға жылжу

INC AL ;қосамыз 1, өйткені санау 1 жүреді

Принтер машинамен байланысты.

Бағдарлама әрқашан, принтер машинамен байланысты екенін тексеруге тиісті, оған шығаруға жібермес бұрын. Жеңіл анықталады, принтер дайын емес екендігі, дәл осылай регистр бит 3 принтер статусы бұл жағдайда 1 орнатылады. Қиыны неге принтер дайын емес екендігін анықтау: өшірілген бе ол, принтер таңдалмаған немесе онда қағаз жоқ. Бұның себебі әр түрлі өндірушілердің принтерлері принтер статусы регистріне биттердің әр түрлі жиындары жібереді. Бірақ регистр статусы биттерге ие болады, бұлар принтер үш жағдайын көрсету тиісті, бірақ биттердің мағынасы нақты бұл шарттарға сәйкес келмейді (бит 3, принтер өшірілгенін көрсету тиіс, бит 4, принтер таңдалмағанын және бит 5 қағаздар жоқтығын). Төменде көрсетілген мағыналар регистр статусына "Эпсон"стандартпен қайтып келеді, қайсыға әдеттегі IBM көрсетіледі:

Интерпретация Биттер тізбегінің Мағынасы

22311011111 принтер дайын

8701010111 принтер дайын емес

11901110111 принтерде қағаздар жоқ

24711110111 принтер өшірілген

Енгізу регистр статусы порт адресі 1 көбірек болады, принтер базалық адресіне қарағанда. LPT1 арналған базалық адрес 0040:0008 адресі бойынша сақталады, LPT2 арналған 0040:000A адресі бойынша және т.с.с. Егер принтер өшірілген болса, онда қосқаннан кейін оған инициализация үшін уақыт керек. Соған дейін, енгізу регистр статусы, принтер машинамен байланысты және берілгендерді қабылдауға дайын деп хабарлағанша дейін қағазды баспаға жіберуді бастамаңыз.

Принтер портынан статус байтын алу үшін функция 2, үзіліс 17Н қолдану керек. DX кіруде LPT номері тұрады (0-2, LPT1-3 үшін). Бұл функция үш қолданылмайтын бит байт лақтырады және шығарып тастайтын операцияны істейді немесе екінің үстінде басқалармен, сондықтан мағына жоғарыдан келтірілгендерден ерекшеленеді:

Интерпретация Биттер тізбегінің Мағынасы

14410010000 принтер дайын

2400011000 принтер дайын емес

18410111000 принтер өшірілген және тағы да қажетті есте сақтау, бұл мағыналар принтерге принтерден алмастырады. Көбінесе жалпы хабарды " өшірілген немесе дайын емес " бит 3, статусы 0 тең береді.

Берілген мысал, ең қарапайым бит on – line регистр статусын тексереміз. Байт статусын алу үшін LPT1 базалық адрес қолданылады.

;--- сегменте

MESSAGE DB 'Printer not ready - strike any key when OK$'

;---принтердің машинамен байланысын тексеру (on-line)

MOV AX,40H ;ES көрсетеді BIOS берілгендер облысына

MOV ES,AX ;

MOV DX,ES:[8] ;базалық адресті аламыз

INC DX ;регистра статусы үшін қызметтен алу

IN AL,DX ;AL статус байтын аламыз

TEST AL,1000B ;бит 3 тексереміз

JNZ GO_AHEAD ;егер принтер on-line, онда алға

;--- қате туралы хабарламаны басамыз және перне басуды күтеміз

MOV AH,9 ;жолды шығару функциясы

LEA DX,MESSAGE ;DS:DX хабарламаны көрсетеді

INT 21H ;хабарламаны басамыз

MOV AH,7 ;енгізуді күту функциясы

INT 21H ;перне басуды күтеміз (жаңғырықсыз)

GO_AHEAD: ; бағдарлама жалғасысы

Тапсырма:

1. IBM PC типін анықтау.

2. Дисктік жинақтағыштардың типін және санын анықтау.

3. Дисплей адаптерлерінің типін және санын анықтау.

4. Қосылған принтерлердің санын анықтау.

Әдебиет: 10, бет. 49-61; 7, бет. 35- 39.

Бақылау сұрақтар

1. Компьютер типін қалай шығаруға болады?

2. Дисплей адаптерлерінің типін және санын қалай анықтауға болады?

3. Дисктік жинақтағыштардың типін және санын қалай анықтауға болады?

4. Шеттегі құрылғылардың типін және санын қалай анықтауға болады?