Скачиваний:
38
Добавлен:
01.05.2014
Размер:
1.8 Кб
Скачать
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>

// ‚лЄ«оз Ґ¬ Їа®ўҐаЄг б⥪  Ё гЄ § вҐ«Ґ©

#pragma check_stack( off )
#pragma check_pointer( off )

// Њ Єа® ¤«п Ї®¤ зЁ §ўгЄ®ў®Ј® бЁЈ­ « 

#define BEEP() _asm { \
								_asm xor  bx, bx    \
								_asm mov  ax, 0E07h \
								_asm int  10h       \
						  }

// “Є § вҐ«м ­  бв аго дг­ЄжЁо ®Ўа Ў®вЄЁ
//   9-Ј® ЇаҐалў ­Ёп

void (_interrupt _far *oldkey)( void );

// ЋЎкпў«Ґ­ЁҐ ­®ў®© дг­ЄжЁЁ ®Ўа Ў®вЄЁ
//   9-Ј® ЇаҐалў ­Ёп

void _interrupt _far newkey( void );

void main(void);

void main(void) {

	 unsigned size; // ђ §¬Ґа १Ё¤Ґ­в­®© з бвЁ
						 // TSR-Їа®Ја ¬¬л

	 char _far *newstack; // “Є § вҐ«м ­  ­®ўл© б⥪,
								 // Є®в®ал© Ўг¤Ґв ЁбЇ®«м§®ў вм
								 // TSR-Їа®Ја ¬¬ 

	 char _far *tsrbottm; // “Є § вҐ«м ­  Є®­Ґж
								 // TSR-Їа®Ја ¬¬л, ЁбЇ®«м§гҐвбп
								 // ¤«п ®ЇаҐ¤Ґ«Ґ­Ёп а §¬Ґа 
								 // १Ё¤Ґ­в­®© з бвЁ

	 // ‡ ЇЁблў Ґ¬  ¤аҐб б⥪  TSR-Їа®Ја ¬¬л

	 _asm mov  WORD PTR newstack[0], sp
	 _asm mov  WORD PTR newstack[2], ss

	 FP_SEG(tsrbottm) = _psp; // “Є § вҐ«м Є®­ж 
	 FP_OFF(tsrbottm) = 0;    // Їа®Ја ¬¬л гбв ­ ў«Ёў Ґ¬
									  // ­  ­ з «® PSP

	 // ‚лзЁб«пҐ¬ а §¬Ґа Їа®Ја ¬¬л ў Ї а Ја д е
	 // „®Ў ў«пҐ¬ 1 Ї а Ја д ­  б«гз ©
	 // ­ҐЄа в­®© Ї а Ја дг ¤«Ё­л

	 size = ((newstack - tsrbottm) >> 4) + 1;

	 // ‚бва Ёў Ґ¬ бў®© ®Ўа Ў®взЁЄ ЇаҐалў ­Ёп 9,
	 // § Ї®¬Ё­ Ґ¬ бв ал© ўҐЄв®а ЇаҐалў ­Ёп 9

	 oldkey = _dos_getvect(0x9);
	 _dos_setvect(0x9, newkey);

	 // ‡ ўҐаи Ґ¬ Їа®Ја ¬¬г Ё ®бв Ґ¬бп ў Ї ¬пвЁ

	 _dos_keep(0, size);
}


// Ќ®ўл© ®Ўа Ў®взЁЄ Є« ўЁ вга­®Ј® ЇаҐалў ­Ёп

void _interrupt _far newkey() {

	BEEP(); // ‚л¤ Ґ¬ §ўгЄ®ў®© бЁЈ­ «

	// ‚л§лў Ґ¬ бв ­¤ ав­л© ®Ўа Ў®взЁЄ ЇаҐалў ­Ёп 9

	_chain_intr( oldkey );

}

Соседние файлы в папке KEY_BEEP