Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
// „ п Їа®а ¬¬ ЁбЇ®«м§гҐв ЇаҐалў ЁҐ 80h,
// Є®в®а®Ґ гбв ў«Ёў Ґвбп ¤Ґ¬®бва жЁ®л¬
// ¤а ©ўҐа®¬. „«п Їа ў«Ё«м®© гбв ®ўЄЁ д ©«
// CONFIG.SYS ¤®«¦Ґ ᮤҐа¦ вм, ЇаЁ¬Ґа,
// в Єго бва®Єг ¤«п Ї®¤Є«озҐЁп ¤а ©ўҐа :
//
// device=e:\sysprg\devdrv.sys 1 80 378 379 37a 37a
//
// —Ёб«® 80 ®§ з Ґв ®¬Ґа ЁбЇ®«м§гҐ¬®Ј® ЇаҐалў Ёп.
#include <io.h>
#include <conio.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <malloc.h>
#include <errno.h>
#include <dos.h>
int main(void);
union REGS inregs, outregs;
struct SREGS segregs;
int main(void) {
char buf[100], ch;
int io_handle;
unsigned count;
// ЋвЄалў Ґ¬ гбва®©бвў® б Ё¬ҐҐ¬ DEVDRIVR
if( (io_handle = open("DEVDRIVR", O_RDWR)) == - 1 ) {
// …б«Ё ®вЄалвм Ґ г¤ «®бм, ўлў®¤Ё¬
// Є®¤ ®иЁЎЄЁ
printf("ЋиЁЎЄ ЇаЁ ®вЄалвЁЁ гбва®©бвў %d",errno);
return errno;
}
// —Ёв Ґ¬ 8 Ў ©в Ё§ гбва®©бвў ў ЎгдҐа buf
printf("\n‚ўҐ¤ЁвҐ 8 бЁ¬ў®«®ў б Є« ўЁ вгал\n");
if( (count = read(io_handle, buf, 8)) == -1 ) {
// …б«Ё ЇаЁ з⥨Ё Їа®Ё§®и« ®иЁЎЄ ,
// ўлў®¤Ё¬ ҐҐ Є®¤
printf("ЋиЁЎЄ з⥨п %d",errno);
return errno;
}
// ‡ Єалў Ґ¬ Їа®зЁв го бва®Єг г«Ґ¬
// ¤«п Ї®б«Ґ¤го饣® ўлў®¤ дгЄжЁҐ© printf
buf[8]=0;
printf("\n±±± ‚ўҐ¤Ґ бва®Є : %s ±±±",buf);
// ‚лў®¤Ё¬ в®«мЄ® зв® Їа®зЁв лҐ ¤ лҐ
// ®Ўа в® в® ¦Ґ гбва®©бвў®
if( (count = write(io_handle, buf, 8)) == -1 ) {
// …б«Ё ЇаЁ § ЇЁбЁ Їа®Ё§®и« ®иЁЎЄ ,
// ўлў®¤Ё¬ ҐҐ Є®¤
printf("ЋиЁЎЄ § ЇЁбЁ %d",errno);
return errno;
}
// ‚ў®¤Ё¬ бва®Єг IOCTL Ё§ гбва®©бвў
printf("\n‚ўҐ¤ЁвҐ бва®Єг IOCTL (8 бЁ¬ў®«®ў): ");
inregs.h.ah = 0x44;
inregs.h.al = 2;
inregs.x.bx = io_handle;
inregs.x.dx = (unsigned)buf;
inregs.x.cx = 8;
intdos( &inregs, &outregs );
if(outregs.x.cflag == 1) {
// ЏаЁ ®иЁЎЄҐ ўлў®¤Ё¬ Є®¤ ®иЁЎЄЁ
printf("IOCTL error %x\n",&outregs.x.ax);
exit(-1);
}
buf[8]=0;
printf("\n±±± ‚ўҐ¤Ґ бва®Є IOCTL: %s ±±±",buf);
// ‚лў®¤Ё¬ бва®Єг IOCTL гбва®©бвў Ё§ buf
printf("\n‚뢥¤Ґ бва®Є IOCTL: ");
inregs.h.ah = 0x44;
inregs.h.al = 3;
inregs.x.bx = io_handle;
inregs.x.dx = (unsigned)buf;
inregs.x.cx = 8;
intdos( &inregs, &outregs );
if(outregs.x.cflag == 1) {
// ЏаЁ ®иЁЎЄҐ ўлў®¤Ё¬ Є®¤ ®иЁЎЄЁ
printf("IOCTL error %x\n",&outregs.x.ax);
exit(-1);
}
printf("\n\n\nЏа®ўҐа塞 ўл§®ў ЇаҐалў Ёп."
"\n"
"\nЌ ¦¬ЁвҐ «оЎго Є« ўЁиг...\n\n");
getch();
printf("\nЉ®¬ ¤ § ЇЁбЁ:\n");
inregs.h.ah = 0x0; /* WRITE */
inregs.h.bh = 0x777;
inregs.h.bl = 0x13;
int86( 0x80, &inregs, &outregs );
printf("\nЉ®¬ ¤ з⥨п:\n");
inregs.h.ah = 0x1; /* READ */
inregs.h.bh = 0x776;
int86( 0x80, &inregs, &outregs );
ch=outregs.h.bl;
printf("Џ®«г祮Ґ § 票Ґ: %x\n",ch);
printf("\nЌҐЁ§ўҐбв п Є®¬ ¤ :\n");
inregs.h.ah = 0x2; /* ??? */
int86( 0x80, &inregs, &outregs );
// ‡ Єалў Ґ¬ гбва®©бвў®
close(io_handle);
exit(0);
}