[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
У меня те-же феньки. Я хотел оживить int-ы от SPORT1. Выяснил что
функция __lib_int_determiner из dispat.asm заталкивает в DMOVLAY не то значение (в моем случае должен быть 0). Чтобы обойти эту ситуацию сделал так:
-поменял строку $OBJECTS = 2189_int_tab.doj , 18x_hdr.doj , $COMMAND_LINE_OBJECTS , libio.dlb , libc.dlb ; на $OBJECTS = 218x_hdr.doj , $COMMAND_LINE_OBJECTS , libio.dlb , libc.dlb ;
-поместил файлы 218x_int_tab.asm и dispat.asm к себе в проект,
-в файле 218x_int_tab.asm все адреса в JUMP-ах заменил с __lib_int_determiner на __my_int_determiner
-в файле dispat.asm заменил имя функции __lib_int_determiner на
__my_int_determiner и заменил строку DMOVLAY = PAGE(__MR_INT_SPACE); на DMOVLAY = 0;
-скомпилил-все работает, за исключением прерывания по таймеру.
Для таймера у них отдельный диспечер прерываний не __lib_int_determiner, а ___lib_tmri_ctrl из файла dis_tmr.asm. Разбираясь с этой феней "зоркий сокол" к концу рабочего дня заметил что компилятор выделяет память под две таблицы прерываний __lid_int_table !!! То-же делает и с некоторыми другими переменными С-окружения. На разном этапе выполнения программа обращается к разным экземплярам "близнецов". Странно, что все "это" как-то работает!
E-mail: info@telesys.ru