 
        
        
          Добавил:
          
        
    
            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);
}
