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


тема: im2 и 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, All по выходу из call 3d13 прерывания разрешаются автоматом?

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

от: 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 а я лишь добавлю, что есть компы, в которых не будут читаться дискеты даже при 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. -+-- Вот бы еще они указали что за микруха такая ;).

от: Камиль Каримов
кому: All
дата: 10 Jan 2007
Hello, acidrain aci> Вот бы еще они указали что за микруха такая ;). Все микросхемы входящие в комплект семейства Z80; Z8410; (Z80DMA) - контроллер прямого доступа к памяти; Z8420 (Z80PIO) - контроллер парралельного интерфейса; Z8430 (Z80CTC) - программируемый таймер; Z8440 (Z80SIO) - контроллер последовательного интерфейса; Z8470 (Z80DART) - сдвоенный асинхронный приемо-передатчик.

от: Камиль Каримов
кому: All
дата: 10 Jan 2007
Hello, NovaStorm Nov> Я на Зилог.ком их не нашёл что-то... Ты лучше на www.efind.ru поищи. Ими торгуют все кому не лень.

от: Камиль Каримов
кому: All
дата: 10 Jan 2007
Hello, NovaStorm Nov> Один хрен, их уже не выпускают. Выпускают и продают :) В Промэлектронике: Z84C2006PEG (Z80B(A)-PIO) - 144 р. Z0844006PSC (Z80B-SIO/O) - 282 р.

от: Алексей Гончаров
кому: All
дата: 10 Jan 2007
Hello, caro Дык это небось из старых запасов? Я на Зилог.ком их не нашёл что-то...

от: psb
кому: All
дата: 10 Jan 2007
Hello, klondike klo> Проверяешь стек, если адрес возврата - ПЗУ, возвращаешь в TR-DOS. кажись, не факт, что так будет работать. делали проще, в прерывании ставили ei:jp #3d2f. тогда если был вызов из пзу тр-дос, он туда и возвращается и все работает. если вызов из озу, то он просто по RET(#3d30) вернется в озу. HО(!), если был вызов из пзу бейсика, то облом. для турболоадеров это прокатывало, потому что они пзу бейсика не юзали, а вот для #3d13 точно не прокатит. как вариант - ставить перехватчик на #5cc2 что ли, или где там находится RET, чтоб он щучил переключения между пзу и менял jp #3d2f на RET в обработчике прерывания. вот:)

от: TomCaT
кому: All
дата: 10 Jan 2007
Hello, deathsoft dea> Смотрим сюда (первые 2 строки) http://trd.speccy.cz/book.htm Это я уже видел. И отлично, что комп. вар-т есть, но они у меня и в книжном есть. А "ZX S и TR-DOS для п. и п." -- нет. Hигде и никакого, вот это и печалит.

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

от: Дмитрий Васильевич Терентьев
кому: 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]




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

Похожие статьи:
Железо - Технология это война.
Введение в оболочку 2 - Mozgan Pusher and Hi-Res Color Mode.
Demo-строение - Процедура печати чанков.
Реклама - Реклама и объявления...
Прогаммистам - Интеллект.

В этот день...   8 мая