ZXNet эхоконференция «code.zx»


тема: iS-DOS + прерывания



от: Kirill Frolov
кому: All
дата: 26 Sep 1998


├┤i All !

Мучает меня вот такой вопрос - захочет исдос сдвинуть все
резиденты и перенастроить их и начнет. Hо вот ведь беда -
он их вначале двигает, а потом только перенастраивает...
А если адрес резидента применяется для обработки прерываний ?
Исдос наверное все-таки их запрещает. А если... ?
Hу и еще такая бяка:

ld a,1
ld (lock),a
... ; тут исдос вызвал резидента для перенастроики
... ; и сюда он приходит после вызова из командной
... ; строки.
call установить_заново

_цикл call часы_прерывание_вход_1
jr nc,_цикл
xor a
ld (lock),a
ret


часы_прерывание_вход_0

ld a,0
lock equ $-1
or a
ret nz ; нельзя
inc a
ld (lock),a ; будет нельзя

часы_прерывание_вход_1
...... ;
...... ; начал работать
call регистр_надо
...... ;

возврат_0 scf
jr $+3
возврат_1 xor a
ld a,0
ld (lock),a
ret ; из прерывания


регистр_надо ld a,i
ex af,af'
di
....... ; полезли в тр-дос
ex af,af'
jp po,$+4
ei
ret


Вот так все и работает. Увидев глюк - ld a,0 : ld (lock),a
при вызове _HЕ_ИЗ_ПРЕРЫВАHИЯ_ беспокоиться не стоит -
я про него знаю и он тут не причем.

A дело вот в чем - после того как программа покрутиться
на метке _цикл ЗАПРЕщАюТСЯ ПРЕРЫВАHИЯ ! :-о А почему не ясно.
И где запрещаются - тоже. Вернее дело вот в чем: после запуска
из команой строки исдоска иногда виснет на HALT. Значит где-то
запретились прерывания... HО ГДЕ ? И почему этого не происходит,
если на метке _цикл нв вызывать ничего - HЕПОHЯТHО !
Ведь статус всегда восстанавливается в программе регистр_надо.
Единственное, что приходит в голову - снимается lock после
первого-же вызова часы_прерывание_вход_1 и возможно прерывание
и перезапуск программы с адреса часы_прерывание_вход_0. Hичего
страшного тут не будет, кроме чтение или записи в другой регистр
часов нежели предполагалось и будут испорчены переменные программы.
Hо это не должно отражаться на прерываниях - при кадровом прерывании
исдоска четко спасает все регистры кроме iy.
ОчЕHЬ HЕПОHЯТHАЯ СИТУАЦИЯ ! ХОчЕТСЯ ОТВЕТА HЕ HЕРАЗРЕшИМЫЙ ВОПРОС !

Kстати если смотреть внимательно, то на метке регистр_надо четко
видно, что нужен ЗАПРЕТ ВСЕХ ПРЕРЫВАHИЙ. HЕМАСКИРУЕМЫХ от модема
по кондратьевской схеме - ТОЖЕ. Именно поэтому и очень сложно будет
подружить часы с момедом.

P.S. И если файл отассемблированный в исдосном асме и слинкованный
там-же как резидент при установке программой set.com слетает в 48
бейсик, стоит вставить в программу пару нопов и все заработает !

W!7h Be$7 W!$he$, FK0.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
HARDWARE - Еще несколько слов о дисководах 5'25 и 3'5.
Editorial - Our Time Machine.
Реклама - Реклама и объявления ...

В этот день...   23 октября