Специальный форум для программистов на спектруме!
Модератор: Spectre
Специальный форум для программистов на спектруме!
Я решил сделать отдельный форум в котором на первых порах буду сам, потом надеюсь и другие кодеры подтянутся по мере сил отвечать на вопросы по программированию на ассемблере процессора Z80. Приветствуются вопросы по архитектуре спектрума, портам, гоовым исходникам, способам работы, командам и так далее.
К сожалению активных кодеров осталось мало, поэтому внесу свой посильный вклад.
К сожалению активных кодеров осталось мало, поэтому внесу свой посильный вклад.
У меня вопрос. У Спектрума есть AY, с нее можно считывать состояние портов (кажется так делают индикатор уровня), есть регистр огибающей, там можно задать период изменения выходного уровня. Так можно ли использовать это как таймер квантов времени между прерываниями? Ну скажем что бы процессор прочитал из AY и подумал: "Ага, экран отрисовивается! Хм, не буду ничего делать в пятой банке памяти, пойду посмотрю что во второй есть не законченного" Ну примерно так.
Улыбок вам
Да чего такого? Этож СПЕЦИАЛЬНЫЙ ФОРУМ ДЛЯ ПРОГРАММИСТОВ НА СПЕКТРУМЕ. Или AY это не на Спектруме? Просто у спека нету хардверного програмируемого таймера, а в AY есть огибающая, мне просто интересно - можно ли в произвольный момент времени прочитать ее значение? Если да, то подбираем ее величину так что бы она от максимального значения до минимального доходила за прерывание и программа при выполнении может прочитать из AY состояние и оценить сколько осталось до прихода INTа. Я подумал как нибудь мультиколор завязать на AY. Ну чисто в познавательных целях, а может и выгорело бы чего-нить интересное. Только раз уж этого до сих пор никто не применил за такой срок, то наверное невозможно это. Sorry за сумбурность изложения.
Улыбок вам
Теоретически это возможно, но ты учел затраты времени на чтение из портов и логику обработки состояний? Если это нужно для мультиколора, там критична каждая команда (за время выполнения NOP'а четыре пикселя рисуется!).Valeron писал(а):У меня вопрос. У Спектрума есть AY, с нее можно считывать состояние портов (кажется так делают индикатор уровня), есть регистр огибающей, там можно задать период изменения выходного уровня. Так можно ли использовать это как таймер квантов времени между прерываниями? Ну скажем что бы процессор прочитал из AY и подумал: "Ага, экран отрисовивается! Хм, не буду ничего делать в пятой банке памяти, пойду посмотрю что во второй есть не законченного" Ну примерно так.
Привет, я вообще-то мультиколор просто для примера взял, меня сама идея интересует. Там гдето обсуждалось квантование времени меньше прерывания, можно конечно процом отсчитывать - тогда проц занят и не делает что надо. Можно процедуры расчитывать с точностью до такта, но это утомительно, и кроме того чревато не предвиденными ситуациями. А вот если AY отсчет ведет, то проц можно занять произвольной задачей, а когда освободится - пусть постоянно считывает с AY и в момент, который мы зададим огибающей, переходит к другой задаче. Короче лучше конечно таймер в компе иметь и не извращаться. Спасибо что поддержал мою мысль.
Улыбок вам
Тут еще подумал, ведь мультиколор же не обязательно классический делать, можно ведь применить два цвета на верхнюю половину знакоместа, а потом переключить экран на 7 банк и отображать нижнюю половину знакоместа со своими атрибутами. Интересно то что в 5 банке можно перерисовывать нижние четыре строки знакомест, а в седьмой - верхние, это в те моменты когда соответствующая банка в экранную область включена. Когда перерисовка будет закончена нужно поменять очередность переключения банков в экранной области и картинка изменится. Удобство заключается в том что в верхней области по адресам #C000-#FFFF в это время могут лежать банки со спрайтами, графикой, чем угодно, то есть не затрачивается время на переброску скажем в экран седьмого банка из, например, третьего через второй, в то время когда пятый стоит в экране.Spectre писал(а):...
Теоретически это возможно, но ты учел затраты времени на чтение из портов и логику обработки состояний? Если это нужно для мультиколора, там критична каждая команда (за время выполнения NOP'а четыре пикселя рисуется!).
Минус этого способа, даже МИНУСИЩЕ!!! в том что надо синхронизироваться с выборкой видео данных из экранной области.
Бред наверно, а может и пригодится идея кому-нибудь, когда-нибудь.
Улыбок вам
вот так тема..
ну раз нет ниче нового то посмотрим на это по другому...
цытато:
"ага, экран отрисовываеццо, пойду посмотрю чего там не доделоно"
на это потратили дцать тактов..
причем с учетом синусоидального вида огибающей, не догнали в каком месте то экран прорисовываеццо. Ладно, этого избежали задав период так, чтоб полупериод синусоиды звука был равен времени отображения кадра (1 прерывание). составили подробную карту цифирок и получили что всего то есть #00-#0f т.е. 16 значений, поделили на 16 1 halt, а смысл?
как его использовать? да и зачем? похоже на серию бесполезных изобретений... типа видели как я крут, могу и так...
ладно, проц занимался какой нить задачей, пока мы проверяли в каком месте тактовой полосы етно дело было, мы ессно слетели с нее, и ошиблись...
ну раз нет ниче нового то посмотрим на это по другому...
цытато:
"ага, экран отрисовываеццо, пойду посмотрю чего там не доделоно"
на это потратили дцать тактов..
причем с учетом синусоидального вида огибающей, не догнали в каком месте то экран прорисовываеццо. Ладно, этого избежали задав период так, чтоб полупериод синусоиды звука был равен времени отображения кадра (1 прерывание). составили подробную карту цифирок и получили что всего то есть #00-#0f т.е. 16 значений, поделили на 16 1 halt, а смысл?
как его использовать? да и зачем? похоже на серию бесполезных изобретений... типа видели как я крут, могу и так...
ладно, проц занимался какой нить задачей, пока мы проверяли в каком месте тактовой полосы етно дело было, мы ессно слетели с нее, и ошиблись...
так стало быть так таки и нету ???
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей