информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Могу свои наработки предложить ... (DOS-ие, BC++ 3.x) 20.09.03 22:43  Число просмотров: 1606
Автор: oleaster Статус: Незарегистрированный пользователь
Отредактировано 22.09.03 22:50  Количество правок: 1
<"чистая" ссылка>
// Инициализация вектора и контроллера
_asm { cli
mov ax, 0
mov tes, es
mov es, ax

mov ax, word ptr es:[COM_1_INTERR*4]
mov old_ofs_com1, ax
mov ax, word ptr es:[COM_1_INTERR*4+2]
mov old_seg_com1, ax

mov word ptr es:[COM_1_INTERR*4], offset COM_1
mov word ptr es:[COM_1_INTERR*4+2], seg COM_1
}

InitCOMport (0);

_asm {

in al, 21h
and al, 11100111b
out 21h,al

////////////////
in al, 0xA1
and al, 0
out 0xA1,al
////////////////
mov al, 0x20
out 0x20, al
out 0xa0, al

mov ax, tes
mov es, ax
sti
}

------------------------------------


// Инициализация порта

#define COM_1_INTERR 0x0C
#define COM_1_BASREG 0x3f8

#define init_com1_0_del 12//12//0x06
#define init_com1_1_del 0x00
#define init_com1_1_upr 0x03
#define init_com1_3_nor 0x1B

void InitCOMport (char comPos,
unsigned char a=init_com1_0_del,
unsigned char b=init_com1_1_del,
unsigned char c=init_com1_3_nor,
unsigned char d=init_com1_1_upr,
unsigned char e=0x08) {

AdressCOM0=BasAdrCOM[comPos]; // массив с базовыми адресами портов
AdressCOM1=AdressCOM0+1; AdressCOM2=AdressCOM0+2;
AdressCOM3=AdressCOM0+3; AdressCOM4=AdressCOM0+4;
AdressCOM5=AdressCOM0+5; AdressCOM6=AdressCOM0+6;

_asm {

mov al, 0
mov dx, AdressCOM1
out dx, al

mov dx, AdressCOM4
out dx, al

mov dx, AdressCOM5
in al, dx

mov dx, AdressCOM0
in al, dx

mov dx, AdressCOM6
in al, dx


mov al, 0
mov dx, AdressCOM2
out dx, al

---------------

mov al, 0x80
mov dx, AdressCOM3
out dx, al

mov al, a
mov dx, AdressCOM0
out dx, al

mov al, b
mov dx, AdressCOM1
out dx, al

mov al, c
mov dx, AdressCOM3
out dx, al
}


_asm {
mov al, 1011b //e
mov dx, AdressCOM4
out dx, al

mov al, d // 1111b
mov dx, AdressCOM1
out dx, al
}

}



------------------------------------


// Обработчки прерывания
void interrupt COM_1 () {

COMfunction(0); // Функция обработчика

_asm {
mov al, 0x20
out 0x20, al
//out 0xa0, al
}
}



// Заточено под прием-передачу байт
void COMfunction (int e) {
unsigned char BytePrich, ByteInf, BytePhact, Cikl=100;
int AdressCOM0, AdressCOM2, AdressCOM5, AdressCOM6;

AdressCOM0=BasAdrCOM[e]; AdressCOM2=AdressCOM0+2;
AdressCOM5=AdressCOM0+5; AdressCOM6=AdressCOM0+6;

repeat: if ((--Cikl)==0) return;

_asm {
mov dx, AdressCOM2
in al, dx
and ax, 00000111b
mov BytePrich, al
and ax, 00000001b
mov BytePhact, al

mov dx, AdressCOM0
in al, dx
mov ByteInf, al
}

if (BytePhact==1) return;

if (!BytePrich) {
_asm {
mov dx, AdressCOM5
in al, dx
}
}

if (BytePrich&4) {
// Принятый байт Записывается в некоторый буфер
COM_BUF_IN[e][P_in_buf[e]]=ByteInf; if ((++P_in_buf[e])>69) P_in_buf[e]=0;

}

if (BytePrich&2) {
if (P_out_buf[e]!=0) {
ByteInf=COM_BUF_OUT[e][P_stat_buf[e]]; P_stat_buf[e]++; P_out_buf[e]--;

// Байт может быть передан
/*
if (Param2==0) {
_asm {
mov al, ByteInf
mov dx, AdressCOM0
out dx, al
}
} else
{
Param2_buf [e]=ByteInf;
Param2_IDENT[e]=TIMECOMINTERR;
}
*/
}
}

if (BytePrich&6) {
_asm {
mov dx, AdressCOM6
in al, dx
}
}
goto repeat;

}
<programming> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach