im2 и call 3d13

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

От moroz1999 Кому All 29.12.2006

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

От moroz1999 Кому All 29.12.2006

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

От Павел Федин Кому All 29.12.2006

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

От Павел Федин Кому All 29.12.2006

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

От moroz1999 Кому All 29.12.2006

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

От Марк Антонов Кому All 29.12.2006

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

От moroz1999 Кому All 31.12.2006

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

От TomCaT Кому All 31.12.2006

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

От TomCaT Кому All 31.12.2006

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

От deathsoft Кому All 31.12.2006

Hello, TomCaT Tom> "Как написать игру..." Смотрим сюда (первые 2 строки) http://trd.speccy.cz/book.htm

От deathsoft Кому All 31.12.2006

Hello, moroz1999 mor> так может стоит её выложить хотя бы на VT? Так ее для этого нужно хотя бы отсканировать, а кто этим будет заниматься...

От Георгий Россинский Кому All 10.01.2007

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

От Evgeny Muchkin Кому All 10.01.2007

Hello, klondike klo> Проверяешь стек, если адрес возврата - ПЗУ, возвращаешь в TR-DOS. Браво! Простенько и со вкусом! :)

От acidrain Кому All 10.01.2007

Hello, Sonic Son> По поводу RETI точно не знаю. Об этом написано в книге Ларченко и Радионова опять же - "ZX для пользователей и программистов". Цитата: -+---- Возврат из маскируемых прерываний производится командой RETI. Она распознается специальными переферийными микросхемами*, что позволяет организовать многоуровневую систему прерываний. Hо, поскольку в ZX Spectrum эта система не используется, то вернуться из прерываний можно и по команде RET. *- Фирмой Zilog были разработаны микросхемы, входящие совместно с Z80 CPU в комплект под общим названием Z80. -+-- Вот бы еще они указали что за микруха такая ;).

От Камиль Каримов Кому All 10.01.2007

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

От Камиль Каримов Кому All 10.01.2007

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

От Камиль Каримов Кому All 10.01.2007

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

От Алексей Гончаров Кому All 10.01.2007

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

От psb Кому All 10.01.2007

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

От TomCaT Кому All 10.01.2007

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

От Алексей Гончаров Кому All 10.01.2007

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

От Дмитрий Васильевич Терентьев Кому All 11.01.2007

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

От Георгий Россинский Кому All 14.01.2007

Hello, psb psb> кажись, не факт, что так будет работать. делали проще, в прерывании psb> ставили ei:jp #3d2f psb> И то верно! Кстати, вспомнилось еще кое-что интересное из im2 и стека. А именно - стек мог оказаться в области данных (переброска через стек) + im2 + EI Hа возврате из прерывания была проверка текущего адреса стека и если в диапазоне данных - восстановление подпорченного стеком дампа данных плюс возврат по jp

От psb Кому All 15.01.2007

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

От Георгий Россинский Кому All 16.01.2007

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

От psb Кому All 16.01.2007

Hello, klondike klo> к im2+trdos имеет хм.. а поподробнее? ;) где тр-дос юзает пересылку данных через стек?

От Георгий Россинский Кому All 17.01.2007

Hello, psb psb> хм.. psb> а поподробнее? ;) где тр-дос юзает пересылку данных через стек? :) чего там подробнее? im2+ei+обращение к tr-dos+SP в данных. короче, проехали :)

От psb Кому All 17.01.2007

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

От Георгий Россинский Кому All 18.01.2007

Hello, psb psb> а че проехали-то? я не догнал, зачем ставить стек в данные, если psb> юзаешь тр-дос? фигня какая-то.. psb> если ты через стек что-то перекидываешь (картинку или что там), то psb> как тогда тр-дос? если ты юзаешь тр-дос, то зачем стек в данные? psb> не-по-нят-но! а чего не понятного? :) boot с проверкой смены диска. на im2 - музыка в основном цикле - опрос tr-dos+переброс данных через стек.

От psb Кому All 18.01.2007

Hello, klondike klo> в основном цикле - опрос tr-dos+переброс данных через стек. нууу... я-то думал... тр-дос и переброс данных стеком не пересекаются:) эт частный случай:) да и какой-то неправильный;) (в том смысле, что если это перебрасывалась графика, она должна была это делать синхронно с прерываниями;) чтобы не дергаться;)

От Георгий Россинский Кому All 19.01.2007

Hello, psb psb> нууу... я-то думал... тр-дос и переброс данных стеком не psb> пересекаются:) эт частный случай:) psb> Hу, прерываню то все равно не известно, из трдоса оно отхватило управление или нет? Вот поэтому и была проверка и SP и адреса возврата. psb> да и какой-то неправильный;) (в том смысле, что если это psb> перебрасывалась графика, она должна была это делать синхронно с psb> прерываниями;) чтобы не дергаться;) А там по другом не получалось. Почему - не помню :) Было еще смешнее. С im2 и досом вообще не связано, зато связано с 'неправильностью': цикл: "переброс + halt + очистка" давал рваное изображение, а "переброс + очистка + halt" - стабильное :) Это в во вращающихся "шахматных" полях в OVERDEMO.

От psb Кому All 19.01.2007

Hello, klondike klo> Hу, прерываню то все равно не известно, из трдоса оно отхватило klo> управление или нет? это зависит от подхода;) я бы сделал не так:) но это не важно.. klo> Было еще смешнее. так и тут ничего смешного:) все дело в луче, _абсолютно_ нормальное явление:) только понятнее, если начинать с halt; halt,; очистка, переброс - луч наезжает на очистку, видим глюк halt, переброс, очистка - перебрасываться успевает, а очистку УЖЕ не видно:) хотя фиг знает, если в инт не влазило.. все равно это уже оффтоп:)

От Марк Антонов Кому All 19.01.2007

Hello, klondike тема переросла в бредовую стадию - никто никогда не рисовал спрайты с включенными im2 через trdos klo> "переброс + очистка + halt" - стабильное именно по такому методу работает бОльшая часть 48к игр

От Георгий Россинский Кому All 20.01.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.01.2007

Hello, psb psb> нууу... я-то думал... тр-дос и переброс данных стеком не psb> пересекаются:) эт частный случай:) да и какой-то неправильный;) (в psb> том смысле, что если это перебрасывалась графика, она должна была это psb> делать синхронно с прерываниями;) чтобы не дергаться;) Hу, видишь, проблемы были с пониманием того, почему синхронизации не происходит. Получилось, кстати, весьма плавно. См. например вот эти интро: deflector/sabotage [http://zxaaa.untergrund.net/intrip.html]