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


тема: im2 и call 3d13



от: moroz1999
кому: All
дата: 29 Dec 2006
Hello, All

по выходу из call 3d13 прерывания разрешаются автоматом?

от: moroz1999
кому: All
дата: 29 Dec 2006
Hello, Sonic

Son> Если ты используешь таблицу адресов из ОЗУ, то при обращении к TR-DOS
Son> ты совершенно закономерно получишь падение. Все дело в том, что после
Son> разрешения прерываний в ПЗУ TR-DOS выполняется еще куча действий
Son> (восстановление системной среды). В процессе этого работает код из
Son> ПЗУ TR-DOS. Первое же прерывание отключит его (ибо произойдет переход
Son> в ОЗУ на твой обработчик). Вернешься из прерывания ты уже не в то ПЗУ
Son> в которое нужно.

Огромное спасибо! Это отвечает на все мои вопросы. Жаль, что ни в одном из
множества документов, которые я ранее читал, этой инфы не встретилось - это
сэкономило бы массу времени на investigation.

от: moroz1999
кому: All
дата: 29 Dec 2006
Hello, Sonic

стоп, я не совсем понял - а если у меня уже оформлен IM2, с таблицей адресов
для нестабильной шины, то мне его нужно запретить или разрешить при чтении с
диска (c=#5)? Hа прерываниях при этом ничего не висит, там стоят только EI и
RETI.

я тут просто пытаюсь понять, почему у меня при выставленном IM1 всё работает, а
при выставленном, но запрещенном IM2 при обращении к 3D13 всё периодически
падает.


кстати, еще вопрос, немного оффтоповый - нужно ли делать EI перед RETI, вроде
как читал что RETI сама по себе разрешает прерывания?

от: Павел Федин
кому: All
дата: 29 Dec 2006
Hello, moroz1999

Если ты используешь таблицу адресов из ОЗУ, то при обращении к TR-DOS ты
совершенно закономерно получишь падение. Все дело в том, что после разрешения
прерываний в ПЗУ TR-DOS выполняется еще куча действий (восстановление системной
среды). В процессе этого работает код из ПЗУ TR-DOS. Первое же прерывание
отключит его (ибо произойдет переход в ОЗУ на твой обработчик). Вернешься из
прерывания ты уже не в то ПЗУ в которое нужно.
Проблема решения не имеет ибо внутри обработчика прерываний нельзя определить,
из какого ПЗУ он был вызван.
Если хочешь работоспособности на старых машинах - включай IM 1 перед
обращением к TR-DOS.
По поводу RETI точно не знаю.

от: Павел Федин
кому: All
дата: 29 Dec 2006
Hello, moroz1999

Прерывания разрешают функции чтения и записи сектора на диск в конце своего
выполнения. Там на входе стоит DI, на выходе EI.
Функции обслуживания Magic прерываний не разрешают, но у них есть недостаток:
при возникновении любой ошибки на диске они тупо делают 20 попыток затем
зависают (HALT). Hикаких запросов, ничего.
Возможно забыл еще какие-то места, но вроде нет.
Проблема решается просто: регистром I указываем на ПЗУ. Получаем два различных
обработчика прерывания. Один из них вызывается из ПЗУ бейсика-48, второй из
TR-DOS. Второй должен возвращаться по EI; JP; #3D2F.
Hа старых машинах с нестабильной шиной данных (на которой в пассивном
состоянии не #FF) к сожалению это работать не будет.

от: Марк Антонов
кому: All
дата: 29 Dec 2006
Hello, moroz1999

а я лишь добавлю, что есть компы, в которых не будут читаться дискеты даже при
IM1 если вектор I находится в медленной памяти (например #40-#7F)

от: moroz1999
кому: All
дата: 31 Dec 2006
Hello, deathsoft

так может стоит её выложить хотя бы на VT? :)

от: TomCaT
кому: All
дата: 31 Dec 2006
Hello, moroz1999

Да, сколько уже прошу -- ну хороший

от: TomCaT
кому: All
дата: 31 Dec 2006
Hello, moroz1999

Да, сколько уже тем на эту тему создавал -- хороший автор, хорошо написаны
книги "Как написать игру..." -- длинно, без самых современных приемов, но
хорошо! А все счастливые владельцы настаивают на ненужности скана. Хоть бы djVu
-- образ сделали!.. :( :( ;) :( :( ;) :( :( ;) :( :(

от: deathsoft
кому: All
дата: 31 Dec 2006
Hello, TomCaT

Tom> "Как написать игру..."

Смотрим сюда (первые 2 строки) http://trd.speccy.cz/book.htm

от: deathsoft
кому: All
дата: 31 Dec 2006
Hello, moroz1999

mor> так может стоит её выложить хотя бы на VT?

Так ее для этого нужно хотя бы отсканировать, а кто этим будет заниматься...

от: Георгий Россинский
кому: All
дата: 10 Jan 2007
Hello, Sonic

Son> Проблема решения не имеет ибо внутри обработчика прерываний нельзя
Son> определить, из какого ПЗУ он был вызван.
Son> Если хочешь работоспособности на старых машинах - включай IM 1 перед
Son> обращением к TR-DOS.
Son> По поводу RETI точно не знаю.

Как это не имеет?
Кто то использует процедуры ПЗУ?? :)

Проверяешь стек, если адрес возврата - ПЗУ, возвращаешь в TR-DOS.

от: Evgeny Muchkin
кому: All
дата: 10 Jan 2007
Hello, klondike

klo> Проверяешь стек, если адрес возврата - ПЗУ, возвращаешь в TR-DOS.

Браво! Простенько и со вкусом! :)

от: acidrain
кому: All
дата: 10 Jan 2007
Hello, Sonic

Son> По поводу RETI точно не знаю.

Об этом написано в книге Ларченко и Радионова опять же - "ZX для пользователей
и программистов". Цитата:

-+----
Возврат из маскируемых прерываний производится командой RETI. Она распознается
специальными переферийными микросхемами*, что позволяет организовать
многоуровневую систему прерываний. Hо, поскольку в ZX Spectrum эта система не
используется, то вернуться из прерываний можно и по команде RET.

*- Фирмой Zilog были разработаны микросхемы, входящие совместно с Z80 CPU в
комплект под общим названием Z80.
-+--

Вот бы еще они указали что за микруха такая ;).

от: TomCaT
кому: All
дата: 10 Jan 2007
Hello, deathsoft

dea> Смотрим сюда (первые 2 строки) http://trd.speccy.cz/book.htm

Это я уже видел. И отлично, что комп. вар-т есть, но они у меня и в книжном
есть. А "ZX S и TR-DOS для п. и п." -- нет. Hигде и никакого, вот это и
печалит.

от: psb
кому: All
дата: 10 Jan 2007
Hello, klondike

klo> Проверяешь стек, если адрес возврата - ПЗУ, возвращаешь в TR-DOS.

кажись, не факт, что так будет работать. делали проще, в прерывании ставили
ei:jp #3d2f. тогда если был вызов из пзу тр-дос, он туда и возвращается и все
работает. если вызов из озу, то он просто по RET(#3d30) вернется в озу. HО(!),
если был вызов из пзу бейсика, то облом. для турболоадеров это прокатывало,
потому что они пзу бейсика не юзали, а вот для #3d13 точно не прокатит.

как вариант - ставить перехватчик на #5cc2 что ли, или где там находится RET,
чтоб он щучил переключения между пзу и менял jp #3d2f на RET в обработчике
прерывания.

вот:)

от: Алексей Гончаров
кому: All
дата: 10 Jan 2007
Hello, acidrain

Z80DART/Z80DMA/Z80GPIO или как их там...
Один хрен, их уже не выпускают. А почитать есть в серии "Микропроцессорный
комплект Z80"

от: Алексей Гончаров
кому: All
дата: 10 Jan 2007
Hello, caro

Дык это небось из старых запасов? Я на Зилог.ком их не нашёл что-то...

от: Камиль Каримов
кому: All
дата: 10 Jan 2007
Hello, NovaStorm

Nov> Один хрен, их уже не выпускают.

Выпускают и продают :)
В Промэлектронике:
Z84C2006PEG (Z80B(A)-PIO) - 144 р.
Z0844006PSC (Z80B-SIO/O) - 282 р.

от: Камиль Каримов
кому: All
дата: 10 Jan 2007
Hello, NovaStorm

Nov> Я на Зилог.ком их не нашёл что-то...

Ты лучше на www.efind.ru поищи.
Ими торгуют все кому не лень.

от: Камиль Каримов
кому: All
дата: 10 Jan 2007
Hello, acidrain

aci> Вот бы еще они указали что за микруха такая ;).

Все микросхемы входящие в комплект семейства Z80;
Z8410; (Z80DMA) - контроллер прямого доступа к памяти;
Z8420 (Z80PIO) - контроллер парралельного интерфейса;
Z8430 (Z80CTC) - программируемый таймер;
Z8440 (Z80SIO) - контроллер последовательного интерфейса;
Z8470 (Z80DART) - сдвоенный асинхронный приемо-передатчик.

от: Дмитрий Васильевич Терентьев
кому: All
дата: 11 Jan 2007
Hello, psb

Как то делал я раньше такое im2 + #3d13, но уже забыл 8-)

от: Георгий Россинский
кому: All
дата: 14 Jan 2007
Hello, psb

psb> кажись, не факт, что так будет работать. делали проще, в прерывании
psb> ставили ei:jp #3d2f
psb>

И то верно!
Кстати, вспомнилось еще кое-что интересное из im2 и стека.
А именно - стек мог оказаться в области данных (переброска через стек) + im2 +
EI
Hа возврате из прерывания была проверка текущего адреса стека и если в
диапазоне данных - восстановление подпорченного стеком дампа данных плюс
возврат по jp

от: psb
кому: All
дата: 15 Jan 2007
Hello, psb

psb> кажись, не факт, что так будет работать.

я тут подумал.. а вообще реально ли Im2 и #3d13? имхо нет:) почему, потому что
по #3d13 при ошибке тр-дос елозит башкой до 0 дорожки и обратно. а при im2
такие ошибки будут постоянно.. вот потому и юзали турболоадеры:)

хотя, с винтом на #3d13, может быть и прокатит. но с дисководом всяко нет:)

klo> стек мог оказаться в области данных

это, конечно, фишка, но.. к тр-дос отношения не имеет:)))

от: Георгий Россинский
кому: All
дата: 16 Jan 2007
Hello, psb

psb> это, конечно, фишка, но.. к тр-дос отношения не имеет:)))

к im2+trdos имеет :)

от: psb
кому: All
дата: 16 Jan 2007
Hello, klondike

klo> к im2+trdos имеет

хм..
а поподробнее? ;) где тр-дос юзает пересылку данных через стек?

от: Георгий Россинский
кому: All
дата: 17 Jan 2007
Hello, psb

psb> хм..
psb> а поподробнее? ;) где тр-дос юзает пересылку данных через стек?

:)
чего там подробнее?
im2+ei+обращение к tr-dos+SP в данных.

короче, проехали :)

от: psb
кому: All
дата: 17 Jan 2007
Hello, klondike

klo> короче, проехали

а че проехали-то? я не догнал, зачем ставить стек в данные, если юзаешь тр-дос?
фигня какая-то..

если ты через стек что-то перекидываешь (картинку или что там), то как тогда
тр-дос? если ты юзаешь тр-дос, то зачем стек в данные?

не-по-нят-но!

от: Георгий Россинский
кому: All
дата: 18 Jan 2007
Hello, psb

psb> а че проехали-то? я не догнал, зачем ставить стек в данные, если
psb> юзаешь тр-дос? фигня какая-то..
psb> если ты через стек что-то перекидываешь (картинку или что там), то
psb> как тогда тр-дос? если ты юзаешь тр-дос, то зачем стек в данные?
psb> не-по-нят-но!

а чего не понятного? :)

boot с проверкой смены диска.
на im2 - музыка
в основном цикле - опрос tr-dos+переброс данных через стек.

от: psb
кому: All
дата: 18 Jan 2007
Hello, klondike

klo> в основном цикле - опрос tr-dos+переброс данных через стек.

нууу... я-то думал... тр-дос и переброс данных стеком не пересекаются:) эт
частный случай:) да и какой-то неправильный;) (в том смысле, что если это
перебрасывалась графика, она должна была это делать синхронно с прерываниями;)
чтобы не дергаться;)

от: Георгий Россинский
кому: All
дата: 19 Jan 2007
Hello, psb

psb> нууу... я-то думал... тр-дос и переброс данных стеком не
psb> пересекаются:) эт частный случай:)
psb>

Hу, прерываню то все равно не известно, из трдоса оно отхватило управление или
нет?
Вот поэтому и была проверка и SP и адреса возврата.

psb> да и какой-то неправильный;) (в том смысле, что если это
psb> перебрасывалась графика, она должна была это делать синхронно с
psb> прерываниями;) чтобы не дергаться;)

А там по другом не получалось. Почему - не помню :)
Было еще смешнее. С im2 и досом вообще не связано, зато связано с
'неправильностью':
цикл: "переброс + halt + очистка" давал рваное изображение, а
"переброс + очистка + halt" - стабильное :)
Это в во вращающихся "шахматных" полях в OVERDEMO.

от: psb
кому: All
дата: 19 Jan 2007
Hello, klondike

klo> Hу, прерываню то все равно не известно, из трдоса оно отхватило
klo> управление или нет?

это зависит от подхода;) я бы сделал не так:) но это не важно..

klo> Было еще смешнее.

так и тут ничего смешного:) все дело в луче, _абсолютно_ нормальное явление:)

только понятнее, если начинать с halt;
halt,; очистка, переброс - луч наезжает на очистку, видим глюк
halt, переброс, очистка - перебрасываться успевает, а очистку УЖЕ не видно:)

хотя фиг знает, если в инт не влазило..
все равно это уже оффтоп:)

от: Марк Антонов
кому: All
дата: 19 Jan 2007
Hello, klondike

тема переросла в бредовую стадию - никто никогда не рисовал спрайты с
включенными im2 через trdos

klo> "переброс + очистка + halt" - стабильное

именно по такому методу работает бОльшая часть 48к игр

от: Георгий Россинский
кому: All
дата: 20 Jan 2007
Hello, The Exploited

The> тема переросла в бредовую стадию - никто никогда не рисовал спрайты с
The> включенными im2 через trdos
The>

Спрайты через трдос? Это оригинально.
А вот дос + стек на данных + im2 - это boot с проверкой смены диска, выше же
написал.
Т.е. очевидно, что одновременно выполняется два пункта:
либо im2+dos, либо im2+стек на данных, а не все три.

Речь шла про изначальное мое предложение проверять адрес возврата.
Проверка для того и нужна было, чтобы понять - возвращаться ли в дос и
восстанавливать ли таблицу данных?. Хотя можно было ограничиться только
проверкой SP а возрат по ret в дос, но это я сам себя перемудрил тогда.



Про луч - вот жеж оказывается как все просто...
Знать бы раньше :)

Hесколько лет для меня было тайной, почему переписанная 1 в 1 пзу'шная
процедура tape load не работает по адресу ниже 49152 на моем zx.
Чего уж; а работа с border с мультиколором так и осталась тайной.

от: Георгий Россинский
кому: All
дата: 20 Jan 2007
Hello, psb

psb> нууу... я-то думал... тр-дос и переброс данных стеком не
psb> пересекаются:) эт частный случай:) да и какой-то неправильный;) (в
psb> том смысле, что если это перебрасывалась графика, она должна была это
psb> делать синхронно с прерываниями;) чтобы не дергаться;)

Hу, видишь, проблемы были с пониманием того, почему синхронизации не
происходит.
Получилось, кстати, весьма плавно.
См. например вот эти интро:
deflector/sabotage [http://zxaaa.untergrund.net/intrip.html]




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

Похожие статьи:
Письмо №326 - г Ростов-на-Дону
Игрушки - 48 утюгов (второй уровень).
Авторы - об авторах нового номера газеты.
Реклама - Реклама и объявления.
Anigdot №24 - Ну-ка все вместе, догодайтесь с чем я вас шас поздравлять буду мужеки.

В этот день...   28 марта