Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Топ:
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
2017-12-13 | 175 |
5.00
из
|
Заказать работу |
|
|
_CheckCD PROC C FAR;тестировать CD ROM
;возвращает в AL к-во устройств
;Если 0 - нет MSCDEX
; проверка наличия MSCDEX
push ds
push DATA
pop ds
mov ax, 1500H;получить число устройств
xor bx,bx
int 2FH
;RETURN:
;BX - количество устройств
;CX - буква первого устройства
mov first_drive,cl
mov num_drives,bl
mov ax, 150BH;получить число устройств
xor bx,bx
int 2FH
cmp bx,0ADADH
jne @@egog
jmp short @@exit
@@egog:
xor al,al
xor cl,cl
@@exit:
mov al,num_drives
mov cl,first_drive
pop ds
retf
ENDP _CheckCD
;---------------------------------------------------------------
_DoorOpen PROC C FAR;открыть дверцу
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl; заполнение заголовка
mov help,0;открыть дверь
sendopen:
mov [bx].rh_Len,size Ioctl_Hdr
mov al,dev
mov [bx].rh_Subunit,al
mov [bx].rh_Code,cmIoctl_Output
mov [bx].ioctl_media,0
mov [bx].ioctl_xfer_off,offset help
push ds
pop [bx].ioctl_xfer_seg
mov [bx].ioctl_nbytes,1
mov [bx].ioctl_sector,0
mov word ptr [bx].ioctl_volid,0
mov word ptr [bx].ioctl_volid+2,0
push es
push ds
pop es
mov ax,1510h
mov bx,offset tabl
xor cx,cx
mov cl,letter
int 2fh
mov ax,[bx].rh_Status
pop es
pop ds
pop bp
retf
ENDP _DoorOpen
;---------------------------------------------------------------
_DoorClose PROC C FAR;закрыть дверцу
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl; заполнение заголовка
mov help,5; закрыть дверь
jmp sendopen
ENDP _DoorClose
_Reset PROC C FAR;сброс
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl; заполнение заголовка
mov help,2; резет
jmp sendopen
ENDP _Reset
;---------------------------------------------------------------
_ DoorLock PROC C FAR;блокировать дверцу
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl; заполнение заголовка
mov help,1; запереть дверь
mov help1,1
sendlock:
mov [bx].rh_Len,size Ioctl_Hdr
mov al,dev
mov [bx].rh_Subunit,al
mov [bx].rh_Code,cmIoctl_Output
mov [bx].ioctl_media,0
mov [bx].ioctl_xfer_off,offset help
push ds
pop [bx].ioctl_xfer_seg
mov [bx].ioctl_nbytes,2
mov [bx].ioctl_sector,0
mov word ptr [bx].ioctl_volid,0
mov word ptr [bx].ioctl_volid+2,0
push es
push ds
pop es
mov ax,1510h
mov bx,offset tabl
xor cx,cx
mov cl,letter
int 2fh
mov ax,[bx].rh_Status
pop es
pop ds
pop bp
retf
ENDP _DoorLock
_DoorUnlock PROC C FAR;разблокировать дверцу
ARG dev:byte, letter:byte
|
push ds
push DATA
pop ds
mov bx,offset tabl; заполнение заголовка
mov help,1; запереть дверь
mov help1,0
jmp sendlock
ENDP _DoorUnlock
;---------------------------------------------------------------
_GetLetters PROC C FAR;получить список устройств
ARG buffoffs:word,buffseg:word
push ds es bx
push DATA
pop ds
mov es,buffseg
mov bx,buffoffs
mov ax,150dh
int 2fh
pop bx es ds bp
retf
ENDP _GetLetters
;---------------------------------------------------------------
_StartPlay PROC C FAR;начать проигрывание
ARG dev:byte, letter:byte, start: dword, numsec:dword
push ds
push DATA
pop ds
mov bx,offset tabl; заполнение заголовка
mov [bx].rh_Len,size PlayReq_Hdr
mov [bx].rh_Code,cmPlay_Audio
mov ax,word ptr numsec
mov word ptr [bx].pl_Num,ax
mov ax,word ptr numsec+2
mov word ptr [bx].pl_Num+2,ax
mov ax,word ptr start
mov word ptr [bx].pl_Start,ax
mov ax,word ptr start+2
mov word ptr [bx].pl_Start+2,ax
sendplay:
mov al,dev
mov [bx].rh_Subunit,al
mov [bx].pl_Addrmd,00h
push es
push ds
pop es
mov ax,1510h
mov bx,offset tabl
xor cx,cx
mov cl,letter
int 2fh
mov ax,[bx].rh_Status
pop es
pop ds
pop bp
retf
ENDP _StartPlay
;---------------------------------------------------------------
_StopPlay PROC C FAR;прервать проигрывание
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl; заполнение заголовка
mov [bx].rh_Len,size Request_Hdr
mov [bx].rh_Code,cmStop_Audio
jmp sendplay
ENDP _StopPlay
;---------------------------------------------------------------
_ResumePlay PROC C FAR;продолжить проигрывание
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl; заполнение заголовка
mov [bx].rh_Len,size Request_Hdr
mov [bx].rh_Code,cmResume_Audio
jmp sendplay
ENDP _ResumePlay
_Seek PROC C FAR;позиционирование
ARG dev:byte, letter:byte, sector:dword
push ds
push DATA
pop ds
mov bx,offset tabl; заполнение заголовка
mov [bx].rh_Len,size SeekReq_Hdr
mov [bx].rh_Code,cmSeek
mov [bx].cq_addrmd,addr_hsg
mov ax,word ptr sector
mov word ptr [bx].cq_startadr,ax
mov ax,word ptr sector+2
mov word ptr [bx].cq_startadr+2,ax
xor ax,ax
mov word ptr [bx].cq_startadr,ax
mov word ptr [bx].cq_startadr+2,ax
mov word ptr [bx].cq_numsec,ax
jmp sendplay
ENDP _Seek
_DiskInfo PROC C FAR;информация о диске
ARG dev:byte, letter:byte, buffoffs:word, buffseg:word
getinfo:
push ds
push DATA
pop ds
mov bx,offset tabl; заполнение заголовка
mov [bx].rh_Len,size Ioctl_Hdr
mov [bx].rh_Code,cmIoctl_Input
mov al,dev
mov [bx].rh_Subunit,al
mov [bx].ioctl_media,0
mov ax,buffoffs
mov [bx].ioctl_xfer_off,ax
mov ax,buffseg
mov [bx].ioctl_xfer_seg,ax
mov [bx].ioctl_nbytes,size DiskInfo_Rec
mov [bx].ioctl_sector,0
mov word ptr [bx].ioctl_volid,0
mov word ptr [bx].ioctl_volid+2,0
jmp sendplay
ENDP _DiskInfo
ПРИЛОЖЕНИЕ С
Листинг программы
;программа, реализующая открытие и закрытие дверцы CD ROM
jumps
locals
model compact
include fmt.inc
include codes.inc
|
public _CheckCD;проверить наличие драйвера
public _DoorOpen;открыть дверцу
public _DoorClose;закрыть дверцу
DATA SEGMENT public
num_drives db?
first_drive db?
tabl ReadWriteL_Hdr?
help db?
help1 db?
DATA ENDS
CODE SEGMENT
ASSUME ds:DATA, cs:CODE
_CheckCD PROC C FAR
;возвращает в AL к-во устройств
;Если 0 - нет MSCDEX
; проверка наличия MSCDEX
push ds
push DATA
pop ds
mov ax, 1500H;получить число устройств
xor bx,bx
int 2FH
;RETURN:
;BX - количество устройств
;CX - буква первого устройства
mov first_drive,cl
mov num_drives,bl
mov ax, 150BH;получить число устройств
xor bx,bx
int 2FH
cmp bx,0ADADH
jne @@egog
jmp short @@exit
@@egog:
xor al,al
xor cl,cl
@@exit:
mov al,num_drives
mov cl,first_drive
pop ds
retf
ENDP _CheckCD
;---------------------------------------------------------------
_DoorOpen PROC C FAR
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov al,num_drives
mov cl,first_drive
mov dev, al
mov letter, cl
mov bx,offset tabl; заполнение заголовка
mov help,0;открыть дверь
sendopen:
mov [bx].rh_Len,size Ioctl_Hdr
mov al,dev
mov [bx].rh_Subunit,al
mov [bx].rh_Code,cmIoctl_Output
mov [bx].ioctl_media,0
mov [bx].ioctl_xfer_off,offset help
push ds
pop [bx].ioctl_xfer_seg
mov [bx].ioctl_nbytes,1
mov [bx].ioctl_sector,0
mov word ptr [bx].ioctl_volid,0
mov word ptr [bx].ioctl_volid+2,0
push es
push ds
pop es
mov ax,1510h
mov bx,offset tabl
xor cx,cx
mov cl,letter
int 2fh
mov ax,[bx].rh_Status
pop es
pop ds
pop bp
retf
ENDP _DoorOpen
;---------------------------------------------------------------
_DoorClose PROC C FAR
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl; заполнение заголовка
mov help,5; закрыть дверь
jmp sendopen
ENDP _DoorClose
startup:
mov ax,DATA
mov ds,ax
call _CheckCD
call _DoorOpen
call _DoorClose
mov ax,4c00h
int 021h
CODE ENDS
end startup
ПРИЛОЖЕНИЕ Д
Листинг программы
Программа выполняет чтение и вывод на экран полной информации о SuperVGA адаптере, позволять в диалоговом режиме выбрать и установить видеорежим.
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
typedef char * String;
//информация о стандарте VESA
struct VESAInfo
{ char Sign[4]; // ’VESA’
int Version; //версия
char far* OEM; //тип комплектации видеоадаптера
long Capabilities; //для описания возможностей ЦАП
unsigned int far* ModeList; //информация о видеорежимах
int TotalMemory; // количество видеопамяти
char Reserved[236];
};
//структура содержащая информацию о режиме SuperVGA
struct VESAModeInfo{
int Mode;
char WinAAtributes;
char WinBAtributes;
int WinGranularity;
int WinSize;
unsigned WinASegment;
unsigned WinBSegment;
void far (*WinFuncPtr)();
int BitesPerScanLine;
int XResolution;
int YResolution;
char XCharSize;
char YCharSize;
char NumberOfPlanes;
char BitsPerPixel;
char NumberOfBanks;
char MemoryModel;
char BankSize;
char NumberOfPages;
char Reserved;
char RedMaskSize;
char RedFieldPosition;
char GreenMaskSize;
char GreenFieldPosition;
char BlueMaskSize;
char BlueFieldPosition;
char RsvdMaskSize;
char RsvdFieldPosition;
char DirectColorModeInfo;
char Reserved2[216];
};
typedef struct ModeListNode{
int Mode; // видеорежим
|
int XRes; // разрешение по горизонтали
int YRes; // разрешение по вертикали
char BPP; // глубина цвета
}ModeListNode;
int Num=0,Mode=0; VESAInfo VesaInfo; VESAModeInfo VesaModeI;
ModeListNode ModeList[20]; //список данных о режиме SuperVGA
// проверка - поддерживает ли BIOS, VESA стандарт
int GetVesaInfo(VESAInfo *VI)
{
struct REGPACK reg;
reg.r_ax=0x4f00;
reg.r_es=FP_SEG(VI);
reg.r_di=FP_OFF(VI);
intr(0x10,®);
if (reg.r_ax!=0x004f)
return 0;
return 1;
}
//Получить информацию о режиме SuperVGA.
void GetVesaModeInfo(VESAModeInfo* VI,int Mode)
{ struct REGPACK reg;
reg.r_ax=0x4f01;
reg.r_es=FP_SEG(VI);
reg.r_di=FP_OFF(VI);
reg.r_cx=Mode;
intr(0x10,®);
}
void GetVesaInf() //установка данных о видеорежимах
{ GetVesaInfo(&VesaInfo);
Num=0;
int i=0;
struct REGPACK reg;
while (VesaInfo.ModeList[i]!=0xFFFF)
{
GetVesaModeInfo(&VesaModeI,VesaInfo.ModeList[i]);
if (((VesaModeI.Mode)&1)==1)
if (((int)VesaModeI.BitsPerPixel==8)||((int)VesaModeI.BitsPerPixel==32)||((int)VesaModeI.BitsPerPixel==24))
{
ModeList[Num].Mode=VesaInfo.ModeList[i];
ModeList[Num].XRes=VesaModeI.XResolution;
ModeList[Num].YRes=VesaModeI.YResolution;
ModeList[Num++].BPP=(int)VesaModeI.BitsPerPixel; } i++; }
}
//Установить SuperVGA видеорежим.
void SetVideoMode(int Mode)
{ struct REGPACK reg;
reg.r_ax=0x4f02;
reg.r_bx=Mode;
reg.r_bx&=0x7FFF;
intr(0x10,®);
if (reg.r_ax!=0x004f)
return;
}
void SetTextVideo()
{
struct REGPACK reg;
reg.r_ax=2;
intr(0x10,®);
}
// создание меню
int CreateMenu(char ** Item,int Count)
{
char ch;
int Active=0,Prev=0;
window(1,1,80,25); //создание окна
textcolor(WHITE); //текс белым цветом
textbackground(BLACK); //фон черный
clrscr();
for (int i=0;i<Count;i++)
printf("%s\n",Item[i]);
window(1,1,40,1);
textcolor(BLACK);
textbackground(WHITE);
clrscr();
printf("%s\n",Item[0]);
while (ch!=13)
{
ch=getch();
if (ch==0)
{
ch=getch();
switch (int(ch))
{case 80: Prev=Active;(Active==Count-1)?Active=0:Active++;break;
case 72: Prev=Active;(Active==0)?Active=Count-1:Active--;break; }
window(1,Active+1,40,Active+1);
textcolor(BLACK);
textbackground(WHITE);
clrscr();
printf("%s\n",Item[Active]);
window(1,Prev+1,40,Prev+1);
textcolor(WHITE);
textbackground(BLACK);
clrscr();
printf("%s\n",Item[Prev]);
}
}
return Active;
}
//вывод информации о поддерживаемых режимах
void PrintVesaInfo()
{ window(1,1,80,25);
textcolor(WHITE);
textbackground(BLACK);
clrscr();
GetVesaInfo(&VesaInfo);
struct REGPACK reg;
div_t t=div(VesaInfo.Version,0x100);
cout<<VesaInfo.Sign<<" версия "<<t.quot<<"."<<t.rem<<"\n";
cout<<"Видеоадаптер "<<VesaInfo.OEM<<"\n";
cout<<"Имеется "<<VesaInfo.TotalMemory*64<<" Кб видеопамяти"<<endl;
if ((VesaInfo.Capabilities&1)==1) cout<<"DAC может изменять ширину "<<endl;
if ((VesaInfo.Capabilities&1)==0) cout<<"DAC имеет 6 бит на пиксел "<<endl;
cout<<"Сведения о видеорежимах:"<<endl;
getch();
cout<<"Mode Type Resolution BPP CharS WinA Atr WinB Atr BPLine WinS Planes Granul"<<endl;
|
int count=0;
int i=0;
while (VesaInfo.ModeList[i]!=0xFFFF)
{ GetVesaModeInfo(&VesaModeI,VesaInfo.ModeList[i]);
if (VesaModeI.Mode&1==1)
printf("%Xh %5s %4dx%4d %2d %2dx%2d %4Xh %c%c %4Xh %c%c %4d %2dK %6d %5dK\n",VesaInfo.ModeList[i],
((VesaModeI.Mode&1==1)?((((VesaModeI.Mode>>4)&1)==0)?"Text":"Graph"):"-----"),
VesaModeI.XResolution,VesaModeI.YResolution,(int)VesaModeI.BitsPerPixel,
(int)VesaModeI.XCharSize,(int)VesaModeI.YCharSize,(((VesaModeI.WinAAtributes&1)==1)?VesaModeI.WinASegment:0),
(((VesaModeI.WinAAtributes>>1&1)==1)&&((VesaModeI.WinAAtributes&1)==1)?'R':'-'),
(((VesaModeI.WinAAtributes>>2&1)==1)&&((VesaModeI.WinAAtributes&1)==1)?'W':'-'),
(((VesaModeI.WinBAtributes&1)==1)?VesaModeI.WinASegment:0),
(((VesaModeI.WinBAtributes>>1&1)==1)&&((VesaModeI.WinBAtributes&1)==1)?'R':'-'),
(((VesaModeI.WinBAtributes>>2&1)==1)&&((VesaModeI.WinBAtributes&1)==1)?'W':'-'),
VesaModeI.BitesPerScanLine,(int)VesaModeI.WinSize,(int)VesaModeI.NumberOfPlanes,
VesaModeI.WinGranularity);
i++;
if (count==22&&(VesaInfo.ModeList[i])!=0xFFFF)
{ getch();
clrscr();
cout<<"Mode Type Resolution BPP CharS WinA Atr WinB Atr BPLine WinS Planes Granul"<<endl;
count=-1;
}count++;
} getch();
}
//выбор режима
void ChooseMode()
{
GetVesaInf();
String *M;
M = new String[Num];
for (int i=0;i<Num;i++)
M[i]=new char[20];
char *S = " x ",*S1 = new char[20];
if (S1==NULL) return;
for (i=0;i<Num;i++)
{
itoa(ModeList[i].XRes,M[i],10);
strcat(M[i],S);
itoa(ModeList[i].YRes,S1,10);
strcat(M[i],S1);
char *St=(ModeList[i].BPP==8)?" 256 color":(ModeList[i].BPP==24)?" 24 True Color":" 32 True Color";
strcat(M[i],St);
}
delete []S1;
i=CreateMenu(M,Num);
Mode=i;
SetVideoMode(Mode);//установить выбранный видеорежим
for (i=0;i<Num;i++)
delete []M[i];
delete []M;
}
void MainMenu() //главное меню
{ char ch;
String *Menu;
Menu = new String[8];
for (int i=0;i<3;i++)
Menu[i]=new char[40];
Menu[0]="The information about modes";
Menu[1]="Change of the modes";
Menu[2]="Exit";
while ((i=CreateMenu(Menu,3))!=2)
{
switch(i)
{
case 0:PrintVesaInfo();break; //получение инф-ции о поддерживаемых режимах
case 1:ChooseMode();break; //выбор и установка режима
} }
for (i=0;i<3;i++)
delete []Menu[i]; delete []Menu;
}
void main()
{ window(1,1,80,25);
textcolor(WHITE);
textbackground(BLACK);
clrscr();
//проверка на совместимость
if (GetVesaInfo(&VesaInfo)==0)
{ cout<<"Ваш адаптер не совместим со стандартом VESA";
getch();
return;
}
MainMenu();
СОДЕРЖАНИЕ
Лабораторная работа № 1
Программирование простейших растровых изображений на языке PostScript.……………………………………………………….….…………... 3
Лабораторная работа № 2
Программирование растровых изображений на языке PostScript с использованием процедур. ……………………………….……………….…. 12
Лабораторная работа № 3
Программирование изображений на языке PostScript с использованием операторов ветвления и циклов ……………………………………….….. 18
Лабораторная работа № 4
Приемы низкоуровневой работы с мышью……………………………… 25
Лабораторная работа № 5
Работа с CD проигрывателем. ……………………………………….....….. 33
Лабораторная работа № 6
Программирование видеокарты SuperVGA с помощью стандарта VESA……………………………………………………….……………….…. 37
Лабораторная работа № 7
Загружаемые символьные наборы...…...……………….………...…….…. 50
Лабораторная работа № 8
Низкоуровневое программирование параллельного порта....................... 70
Приложение А ………………………………………………………………...76
|
Приложение Б …………………………………………………………………77
Приложение В …………………………………………………………………82
Приложение Д …………………………………………………………………85
Методические указания и задания к лабораторным работам по курсу
“Методы и способы компьютерных информационных технологий“, (для студентов специальности 7.080407 “Компьютерный эколого-экономический мониторинг ”
Составители: Наталия Евгеньевна Губенко
Вадим Сергеевич Миргород
|
|
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!