по выходу из call 3d13 прерывания разрешаются автоматом?
Вид для печати
по выходу из call 3d13 прерывания разрешаются автоматом?
Прерывания разрешают функции чтения и записи сектора на диск в конце своего выполнения. Там на входе стоит DI, на выходе EI.
Функции обслуживания Magic прерываний не разрешают, но у них есть недостаток: при возникновении любой ошибки на диске они тупо делают 20 попыток затем зависают (HALT). Никаких запросов, ничего.
Возможно забыл еще какие-то места, но вроде нет.
Проблема решается просто: регистром I указываем на ПЗУ. Получаем два различных обработчика прерывания. Один из них вызывается из ПЗУ бейсика-48, второй из TR-DOS. Второй должен возвращаться по EI: JP #3D2F.
На старых машинах с нестабильной шиной данных (на которой в пассивном состоянии не #FF) к сожалению это работать не будет.
стоп, я не совсем понял - а если у меня уже оформлен IM2, с таблицей адресов для нестабильной шины, то мне его нужно запретить или разрешить при чтении с диска (c=#5)? На прерываниях при этом ничего не висит, там стоят только EI и RETI.
я тут просто пытаюсь понять, почему у меня при выставленном IM1 всё работает, а при выставленном, но запрещенном IM2 при обращении к 3D13 всё периодически падает.
кстати, еще вопрос, немного оффтоповый - нужно ли делать EI перед RETI, вроде как читал что RETI сама по себе разрешает прерывания?
Если ты используешь таблицу адресов из ОЗУ, то при обращении к TR-DOS ты совершенно закономерно получишь падение. Все дело в том, что после разрешения прерываний в ПЗУ TR-DOS выполняется еще куча действий (восстановление системной среды). В процессе этого работает код из ПЗУ TR-DOS. Первое же прерывание отключит его (ибо произойдет переход в ОЗУ на твой обработчик). Вернешься из прерывания ты уже не в то ПЗУ в которое нужно.
Проблема решения не имеет ибо внутри обработчика прерываний нельзя определить, из какого ПЗУ он был вызван.
Если хочешь работоспособности на старых машинах - включай IM 1 перед обращением к TR-DOS.
По поводу RETI точно не знаю.
Огромное спасибо! Это отвечает на все мои вопросы. Жаль, что ни в одном из множества документов, которые я ранее читал, этой инфы не встретилось - это сэкономило бы массу времени на investigation.Цитата:
Сообщение от Sonic
а я лишь добавлю, что есть компы, в которых не будут читаться дискеты даже при IM1 если вектор I находится в медленной памяти (например #40-#7F)
http://www.zilog.com/docs/z80/um0080.pdfЦитата:
The RETI instruction also facilitates the nesting of interrupts, allowing higher priority devices to temporarily suspend service of lower priority service routines. However, this instruction does not enable interrupts that were disabled when the interrupt routine was entered. Before doing the RETI instruction, the enable interrupt instruction (EI) should be executed to allow recognition of interrupts after completion of the current service routine.
о! спасибо! :)
Это написано в книге А.Ларченко и Н. Родионова "TR-DOS Для пользователей и программистов"Цитата:
Сообщение от moroz1999
так может стоит её выложить хотя бы на VT? :)
Да, сколько уже тем на эту тему создавал -- хороший автор, хорошо написаны книги "Как написать игру..." -- длинно, без самых современных приемов, но хорошо! А все счастливые владельцы настаивают на ненужности скана. Хоть бы djVu -- образ сделали!.. :( :( ;) :( :( ;) :( :( ;) :( :(
Смотрим сюда (первые 2 строки) http://trd.speccy.cz/book.htmЦитата:
Сообщение от TomCaT
Так ее для этого нужно хотя бы отсканировать, а кто этим будет заниматься...Цитата:
Сообщение от moroz1999
Как это не имеет?Цитата:
Сообщение от Sonic
Кто то использует процедуры ПЗУ?? :)
Проверяешь стек, если адрес возврата - ПЗУ, возвращаешь в TR-DOS.
Браво! Простенько и со вкусом! :)Цитата:
Сообщение от klondike
Об этом написано в книге Ларченко и Радионова опять же - "ZX для пользователей и программистов". Цитата:Цитата:
Сообщение от Sonic
------
Возврат из маскируемых прерываний производится командой RETI. Она распознается специальными переферийными микросхемами*, что позволяет организовать многоуровневую систему прерываний. Но, поскольку в ZX Spectrum эта система не используется, то вернуться из прерываний можно и по команде RET.
*- Фирмой Zilog были разработаны микросхемы, входящие совместно с Z80 CPU в комплект под общим названием Z80.
----
Вот бы еще они указали что за микруха такая ;).
Все микросхемы входящие в комплект семейства Z80:Цитата:
Сообщение от acidrain
Z8410 (Z80DMA) - контроллер прямого доступа к памяти;
Z8420 (Z80PIO) - контроллер парралельного интерфейса;
Z8430 (Z80CTC) - программируемый таймер;
Z8440 (Z80SIO) - контроллер последовательного интерфейса;
Z8470 (Z80DART) - сдвоенный асинхронный приемо-передатчик.
Z80DART/Z80DMA/Z80GPIO или как их там...
Один хрен, их уже не выпускают. А почитать есть в серии "Микропроцессорный комплект Z80"
Выпускают и продают :)Цитата:
Сообщение от NovaStorm
В Промэлектронике:
Z84C2006PEG (Z80B(A)-PIO) - 144 р.
Z0844006PSC (Z80B-SIO/O) - 282 р.
Дык это небось из старых запасов? Я на Зилог.ком их не нашёл что-то...
Ты лучше на www.efind.ru поищи.Цитата:
Сообщение от NovaStorm
Ими торгуют все кому не лень.
Это я уже видел. И отлично, что комп. вар-т есть, но они у меня и в книжном есть. А "ZX S и TR-DOS для п. и п." -- нет. Нигде и никакого, вот это и печалит.Цитата:
Сообщение от deathsoft
кажись, не факт, что так будет работать. делали проще, в прерывании ставили ei:jp #3d2f. тогда если был вызов из пзу тр-дос, он туда и возвращается и все работает. если вызов из озу, то он просто по RET(#3d30) вернется в озу. НО(!), если был вызов из пзу бейсика, то облом. для турболоадеров это прокатывало, потому что они пзу бейсика не юзали, а вот для #3d13 точно не прокатит.Цитата:
Сообщение от klondike
как вариант - ставить перехватчик на #5cc2 что ли, или где там находится RET, чтоб он щучил переключения между пзу и менял jp #3d2f на RET в обработчике прерывания.
вот:)
Как то делал я раньше такое im2 + #3d13, но уже забыл 8-)
И то верно!Цитата:
Сообщение от psb
Кстати, вспомнилось еще кое-что интересное из im2 и стека.
А именно - стек мог оказаться в области данных (переброска через стек) + im2 + EI
На возврате из прерывания была проверка текущего адреса стека и если в диапазоне данных - восстановление подпорченного стеком дампа данных плюс возврат по jp
я тут подумал.. а вообще реально ли Im2 и #3d13? имхо нет:) почему, потому что по #3d13 при ошибке тр-дос елозит башкой до 0 дорожки и обратно. а при im2 такие ошибки будут постоянно.. вот потому и юзали турболоадеры:)Цитата:
Сообщение от psb
хотя, с винтом на #3d13, может быть и прокатит. но с дисководом всяко нет:)
это, конечно, фишка, но.. к тр-дос отношения не имеет:)))Цитата:
Сообщение от klondike
к im2+trdos имеет :)Цитата:
Сообщение от psb
хм..Цитата:
Сообщение от klondike
а поподробнее? ;) где тр-дос юзает пересылку данных через стек?
:)Цитата:
Сообщение от psb
чего там подробнее?
im2+ei+обращение к tr-dos+SP в данных.
короче, проехали :)
а че проехали-то? я не догнал, зачем ставить стек в данные, если юзаешь тр-дос? фигня какая-то..Цитата:
Сообщение от klondike
если ты через стек что-то перекидываешь (картинку или что там), то как тогда тр-дос? если ты юзаешь тр-дос, то зачем стек в данные?
не-по-нят-но!
Цитата:
Сообщение от psb
а чего не понятного? :)
boot с проверкой смены диска.
на im2 - музыка
в основном цикле - опрос tr-dos+переброс данных через стек.
нууу... я-то думал... тр-дос и переброс данных стеком не пересекаются:) эт частный случай:) да и какой-то неправильный;) (в том смысле, что если это перебрасывалась графика, она должна была это делать синхронно с прерываниями;) чтобы не дергаться;)Цитата:
Сообщение от klondike
Ну, прерываню то все равно не известно, из трдоса оно отхватило управление или нет?Цитата:
Сообщение от psb
Вот поэтому и была проверка и SP и адреса возврата.
А там по другом не получалось. Почему - не помню :)Цитата:
Сообщение от psb
Было еще смешнее. С im2 и досом вообще не связано, зато связано с
'неправильностью':
цикл: "переброс + halt + очистка" давал рваное изображение, а
"переброс + очистка + halt" - стабильное :)
Это в во вращающихся "шахматных" полях в OVERDEMO.
это зависит от подхода;) я бы сделал не так:) но это не важно..Цитата:
Сообщение от klondike
так и тут ничего смешного:) все дело в луче, _абсолютно_ нормальное явление:)Цитата:
Сообщение от klondike
только понятнее, если начинать с halt:
halt, очистка, переброс - луч наезжает на очистку, видим глюк
halt, переброс, очистка - перебрасываться успевает, а очистку УЖЕ не видно:)
хотя фиг знает, если в инт не влазило..
все равно это уже оффтоп:)
тема переросла в бредовую стадию - никто никогда не рисовал спрайты с включенными im2 через trdos
именно по такому методу работает бОльшая часть 48к игрЦитата:
Сообщение от klondike
Спрайты через трдос? Это оригинально.Цитата:
Сообщение от The Exploited
А вот дос + стек на данных + im2 - это boot с проверкой смены диска, выше же написал.
Т.е. очевидно, что одновременно выполняется два пункта:
либо im2+dos, либо im2+стек на данных, а не все три.
Речь шла про изначальное мое предложение проверять адрес возврата.
Проверка для того и нужна было, чтобы понять - возвращаться ли в дос и восстанавливать ли таблицу данных?. Хотя можно было ограничиться только проверкой SP а возрат по ret в дос, но это я сам себя перемудрил тогда.
Про луч - вот жеж оказывается как все просто...
Знать бы раньше :)
Несколько лет для меня было тайной, почему переписанная 1 в 1 пзу'шная процедура tape load не работает по адресу ниже 49152 на моем zx.
Чего уж; а работа с border с мультиколором так и осталась тайной.
Ну, видишь, проблемы были с пониманием того, почему синхронизации не происходит.Цитата:
Сообщение от psb
Получилось, кстати, весьма плавно.
См. например вот эти интро:
deflector/sabotage