Вход

Просмотр полной версии : Переключение регистров в AY (выбор несуществующих регистров)



ARTi
25.08.2011, 03:25
Всем здравия!

Стал тут зырить навороты поверх и рядом с AY. Посмотрел схему Turbo Sound по NedoPC. Возникли вопросы:
1) Насколько я понял, AY создавался исходя из функциональности и простоты, из-за чего, в частности, используется неполная дешифрация номера регистра по первым 4-м битам. Так ли это?
2) По схеме NedoPC Turbo Sound не увидел блокировки выбора регистра AY в момент выбора одной из AY путем выбора несуществующего регистра. Если по 1-му вопросу ответ - да, то, получается, что одновременно с выбором одной из AY происходит выбор регистра 0x0E или 0x0F для одной из или даже обеих AY! Так ли это?
3) Если по 2-му вопросу ответ - да, то успевает ли произойти выбор регистра в той AY, с которой производится переключение?
Посмотрел в unreal - сделано по следующей схеме: 1) да, 2) да, 3) нет.

А как на самом деле (в реальных AY, а кстати есть же еще и YM, и другие...)?

Спасибо.

Black_Cat
26.08.2011, 23:19
1) Насколько я понял, AY создавался исходя из функциональности и простоты, из-за чего, в частности, используется неполная дешифрация номера регистра по первым 4-м битам. Так ли это?Нет, все внутренние регистры адресуются по 8 битам


2) По схеме NedoPC Turbo Sound не увидел блокировки выбора регистра AY в момент выбора одной из AY путем выбора несуществующего регистра. Если по 1-му вопросу ответ - да, то, получается, что одновременно с выбором одной из AY происходит выбор регистра 0x0E или 0x0F для одной из или даже обеих AY! Так ли это?нет, ты чёто не то понял, по умолчанию выбран AY0($FE), больше никаких умолчаний нет

ARTi
26.08.2011, 23:57
Нет, все внутренние регистры адресуются по 8 битам
Почему тогда в популярном эмуле сделан выбор регистра лишь на основании младших 4-х бит? (у меня тоже пока так сделано, и думаю в других эмулях тоже).
И если регистры адресуются по 8 битам, то что тогда читается из несуществующих? Или попытка выбора несуществующего регистра просто ничего не выбирает?


нет, ты чёто не то понял, по умолчанию выбран AY0($FE), больше никаких умолчаний нет
Я не об умолчаниях говорил. А о том, что значение, предназначенное для селекции AY (0xFE или 0xFF), не блокируется и беспрепятственно проходит в AY, где влияет на ее состояние (т.е. одновременно выбирается хз какой регистр в хз каком AY).

Собственно вопросы мои как раз по этим особенностям.

P.S. А по-моему, хотя мой склероз может и ошибаться, когда у меня был реал, я проверял на нем чтение/запись регистров AY во всем диапазоне 0-255, и вроде получалось, что дешифрация по младшим 4-м битам, а старшие на выбор регистра не влияют...

Black_Cat
28.08.2011, 22:47
P.S. А по-моему, хотя мой склероз может и ошибаться, когда у меня был реал, я проверял на нем чтение/запись регистров AY во всем диапазоне 0-255, и вроде получалось, что дешифрация по младшим 4-м битам, а старшие на выбор регистра не влияют...о каких 4х битах речь? Я о внутренних регистрах, а ты?

Я не об умолчаниях говорил. А о том, что значение, предназначенное для селекции AY (0xFE или 0xFF), не блокируется и беспрепятственно проходит в AY, где влияет на ее состояние (т.е. одновременно выбирается хз какой регистр в хз каком AY).почему х.з. какой, именно $FE и $FF

ARTi
29.08.2011, 10:15
о каких 4х битах речь? Я о внутренних регистрах, а ты?
Я о том, что регистры AY выбираются значениями от 0 до 15, это 4 бита. Я про разрядность и дешифрацию выбора регистров, а не про них самих.


почему х.з. какой, именно $FE и $FF
Что это за регистры? Я знаю только про регистры $00...$0F.

Black_Cat
29.08.2011, 21:18
Что это за регистры?Нет там регистров, это свободное адресное пространство внутренних регистров, используемое для всяких левых целей типа переключения AY и т.д.

---------- Post added at 21:18 ---------- Previous post was at 21:09 ----------


Я о том, что регистры AY выбираются значениями от 0 до 15, это 4 бита. Я про разрядность и дешифрацию выбора регистров, а не про них самих.
под рукой pdf нет, но насколько помню внутри AY дешифрируются все 8 бит. Если в эмулях токо 4 - они кривые

psb
30.08.2011, 01:59
в эмулях попробуйте поменять AY/YM.

---------- Post added at 03:59 ---------- Previous post was at 03:57 ----------

да! и даташиты читать первым делом!

а собственно, что за интерес-то, успевает или нет включиться какой-то левый регистр? на звук это не влияет, а учитывать это и писать *****код не нужно!

ARTi
30.08.2011, 05:35
в эмулях попробуйте поменять AY/YM.
При чем здесь это? Я смотрел исходный код, так что настройки тут не при чем.


даташиты читать первым делом!
В документации утверждается (насколько я понял), что выбор в старших 4-х битах значения, отличного от 0, переводит внутреннюю шину в высокоимпедансное состояние и, т.о., выбор регистра не производится. Т.е. регистр выбирается лишь при значениях 0x00-0x0F. Это, тащемта, отвечает на мои вопросы, но есть нюанс. Например, в той же документации сказано, что частота каждого из меандров, генерируемых тремя генераторами тонов, получается делением входной частоты на 16 и дальнейшим уменьшением заданного в 12-битовом регистре периода значения до нуля. Что, строго говоря, не соответствует действительности - ссылку сейчас предоставить не могу, но вроде где-то на форуме обсуждалось.
Вообще даташиты на девайсы нередко пестрят упрощениями и/или ошибками, иногда даже грубыми в масштабах целого раздела (взять хотя бы NXP2214, раздел про АЦП). Конечно, это понятно тем, у кого достаточно опыта в этом вопросе. Остальным необходимо принять, что документации можно верить для понимания общей картины, а конкретные моменты необходимо проверять экспериментально.
Взять оф. документацию на Z80. Есть там ошибки/недочеты/недоговорки? Конечно есть. Аналогично с AY.
Потому и задаю здесь вопросы.


насколько помню внутри AY дешифрируются все 8 бит. Если в эмулях токо 4 - они кривые
Может и так, а может - в соответствии с вышесказанным - и нет. Отсюда и мои вопросы.


а собственно, что за интерес-то, успевает или нет включиться какой-то левый регистр?
Именно.


на звук это не влияет, а учитывать это и писать *****код не нужно!
У Вас неверные понятия о том, что такое "*****код". Говнокод - это говенный код, а не код для обеспечения лишних или ненужных возможностей, что, скорее всего, Вы и имели в виду. Две большие разницы. Хотя, Вы и сами должны это знать не хуже меня, указанная в Вашем профиле профессия говорит сама за себя.
С другой стороны, Ваше мнение на этот счет меня не волнует - ничего личного. Для эмуляции Z80 исследовали все, что только можно и даже то, что вроде как и не нужно (флаг p/v в блочных операциях в/в, например). Мне недостает инфы такого же рода относительно AY, вот и все. Для полноты картины, так сказать.

psb
30.08.2011, 08:22
давайте тогда по-порядку.

Я смотрел исходный код, так что настройки тут не при чем.
какой такой исходный код вы смотрели? вы меня заставили усомниться в своих знаниях и проверить свои слова;) итого, я вместо вас сделал этот опыт:
если в эмуле стоит модель AY, то 4 старших бита регистра отбрасываются, и записывая в регистр 17, мы реально пишем в рег. 1. и читаем из регистра 1 то, что записали (на самом деле именно из рег.1 мы прочитаем только 4 мл. бита).
если поставить модель YM2149, то регистров выше 16 нет вообще и читается из них FF. на этой методике еще в 90х были разработаны детекторы типа муз.проца.

ну и не забывайте еще о TSFM, там регистров больше 16.


Например, в той же документации сказано, что частота каждого из меандров, генерируемых тремя генераторами тонов, получается делением входной частоты на 16 и дальнейшим уменьшением заданного в 12-битовом регистре периода значения до нуля. Что, строго говоря, не соответствует действительности - ссылку сейчас предоставить не могу, но вроде где-то на форуме обсуждалось.
ну вы ссылку, все же, поищите;) что-то не верится. как еще-то? можно увеличивать и сравнивать;)


У Вас неверные понятия о том, что такое "*****код". Говнокод - это говенный код, а не код для обеспечения лишних или ненужных возможностей, что, скорее всего, Вы и имели в виду.
у меня простые понятия *****кода: должен работать, а не работает - *****код.
вот скажите, вам кто-то гарантировал (в доке по TS), какой будет включен регистр после смены чипа? или вы так уверены, что не будет никакой иной схемы включения нескольких муз.процов? завтра выйдет новый клон с интегрированным TS и другой схемой. сэкономите 1 копейку, потом у кого-то ваш ГОВНОКОД не заработает. вот и весь расклад;)

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

ARTi
30.08.2011, 10:45
давайте тогда по-порядку
Давайте, только читать тему надо повнимательнее.

если в эмуле стоит модель AY, то 4 старших бита регистра отбрасываются, и записывая в регистр 17, мы реально пишем в рег. 1. и читаем из регистра 1 то, что записали (на самом деле именно из рег.1 мы прочитаем только 4 мл. бита)
Так об AY и речь! У меня где-то про YM написано? Где??

ну вы ссылку, все же, поищите что-то не верится. как еще-то? можно увеличивать и сравнивать
Увеличивать и сравнивать, да, так и сделано. Ссылку-то я найду, почему сразу и не привел, что нашел ее поиском совсем другой темы, а теперь вот... Но может, Вы раньше меня найдете - ведь ищущий истину сам найдет, не дожидаясь, когда на блюдечке с голубой каемочкой подадут...

у меня простые понятия *****кода: должен работать, а не работает - *****код.
Это самая большая ошибка, затрудняющая любые исправления. Никакой код Вам лично ничего не должен. И мне он тоже ничего не должен. Он просто не работает, но что хуже, он не работает иногда.

вот скажите, вам кто-то гарантировал (в доке по TS), какой будет включен регистр после смены чипа?
Мне этот TS нафиг не сдался, я его проэмулирую и все, когда это будет я не знаю, а привел его лишь в качестве наглядного примера.

или вы так уверены, что не будет никакой иной схемы включения нескольких муз.процов?
Я ни в чем не уверен, потому и вопросы задаю - может порой они кажутся глупыми (потому и раздел соответствующий выбрал для темы), но некоторые вместо того чтобы по делу ответить, просто находят повод для глумления.

я бы понял эти вопросы в контексте создания эмуля, а с т.з. обычного программинга AY - это не нужно использовать
Дело в том, что как раз таки и не поняли.
Я настоятельно рекомендую вернуться к теме. Ваша невнимательность и резкость уже привели как минимум к 2-м постам не по теме: один - Ваш; другой - мой, потому что я не сдержался. Со своей стороны я постараюсь больше не допускать такого неуважения к форумчанам.

Тем не менее, свои вопросы я не отменял. Кстати, после прочтения расширенной версии даташита, возникли еще вопросы - по поводу регистров 0x0E и 0x0F. Но об этом чуть позже, возможно я сам разберусь и тут изложу.

Прошу прощения за досадное отклонение от темы. У кого есть соображения, пожалуйста, выкладывайте.

psb
31.08.2011, 03:01
столько написали, а своей цели не раскрыли. как и того, с какой т.з. вам это нужно знать (эмуляция или программинг). я, например, уже не знаю, чего вам еще не хватает и почему. ждите телепатов, чего уж...

Это самая большая ошибка
кажется, это вы не поняли моей мысли: код можно написать так, чтобы он работал везде, а можно накосячить или намеренно что-то подсократить, или положиться на что-то, чего вам никто нигде не гарантировал. тогда у вас оно будет работать, а где-то - нет. вот это и есть один из вариантов *****кода.
кто кому должен и не должен - не надо только троллить. вам же понятно, что есть даташиты на чипы, доки на изделия. подразумевается что все это работает так, как описано в доках. вот это и называется "должны". если вы в порт выбора регистра записали число - оно должно (да-да, вам лично! :v2_lol:) выбрать регистр. в доке же на тс вряд ли есть слова, описывающие то, что вы ищите. это значит, что нельзя на это полагаться, учитывая, что переключение происходит по этому же порту. заметьте, с т.з. не*****кода это переключение на состояние AY как бы не влияет (в порт данных же вы не пишете).


Дело в том, что как раз таки и не поняли.
Я настоятельно рекомендую вернуться к теме. Ваша невнимательность и резкость уже привели как минимум к 2-м постам не по теме
пока вы будете темнить, никто вам (кроме БК) не поможет: нифига не ясно, что именно вы хотите, с какой целью (в каких подробностях: какая разница между увеличением и уменьшением значения регистра тона, если снаружи результат одинаковый?). здесь на форуме достаточно людей, знающих как работает AY, могущих провести эксперименты на реале, писавших эмуляторы и прочий софт, но вы спросить-то внятно не можете... чего вы тогда ждете?

ARTi
31.08.2011, 06:29
столько написали, а своей цели не раскрыли
Все раскрыто. Но это неважно, ведь не Вам решать, нужна мне та или иная информация, - а мне. Она просто нужна. Потому я и открыл тему. Кстати, Вам бы понравилась моя цель, но несмотря на это я предпочитаю молчать, подчеркивая важность именно самой информации, а не того, для чего она предназначена. Тогда сразу и видно - кто владеет информацией, а кто просто пришел погундосить.
Black_Cat-у огромная благодарность за терпение, возможно мои вопросы необычны и туповаты - оттого и непонятны, а вовсе не из-за того, что из написанного ничего не понять. Ну так потому и раздел для темы выбран соответствующий.

если вы в порт выбора регистра записали число - оно должно (да-да, вам лично! ) выбрать регистр
А что Вы сказали бы насчет 4 таймеров в новом микроконтроллере, после того, как в старых вы постоянно теснились и пытались обойтись имеющимися 1-2? И регистры-то у каждого таймера отдельные, и различные биты управления свои собственные, причем все таймеры одинаковые, 32х-битные с таким же делителем? Зашибись - один таймер на систему, другой на антенну, третий... стоп! И вдруг выясняется, что по факту в одно время работает лишь один таймер. Сначала не верится - может что-то не так сделал? И так переписываешь управление, и эдак... но нет - даже 2 таймера и то не работают одновременно! А в даташите - ни в одной из редакций - об этом ни слова! На блок-схемах красуется 4 отдельных независимых блока, а на деле он один. И ерраты молчат как рыбы об лед! И кто здесь кому чего должен?! Ведь написано же! И даже нарисовано - сами знаете для кого!!

пока вы будете темнить
Все мои основные вопросы в первом посте. Цель нужно было бы выразить, если без нее вопросы были бы непонятными, а с ней - понятными.
Вот вам с явным (повторным) обозначением моей цели станет понятнее? Сомневаюсь. Не потому что с Вами что-то не так, а потому что цель не внесет никакой ясности.

какая разница между увеличением и уменьшением значения регистра тона, если снаружи результат одинаковый?
В том-то и дело, что не одинаковый. Сейчас объясню. Когда счетчик уменьшается до 0, предполагается, что именно в момент обнуления (или перехода с 0 на -1) счетчик загружается значением регистра периода. Тут вроде все ясно.
Когда же счетчик увеличивается с 0 до значения регистра периода, необходимо при каждом увеличении сверяться со значением периода; если значение счетчика стало больше значения регистра периода, тогда обнуляем счетчик и по новой.
В случае уменьшения счетчика, скажем, запишу-ка я 4095 в регистр периода. Сначала счетчик дойдет до 0, после чего загрузит в себя значение 4095. Тут я через тактов (этого счетчика) 50 записываю новое значение в регистр периода, к примеру, 41. Но пока счетчик не обнулится, это число ему по барабану.
В случае увеличения счетчика сделаем то же самое, запишем 4095. Скорее всего, это число больше или равно ранее записанному, так что счетчик дойдет до 4095 и обнулится. Через 50 тактов (этого счетчика) записываем новое значение 41. Однако, счетчик наш уже насчитал больше 41, поэтому он тут же сбросится и начнет новый отсчет.
Само собой во всех случаях перезагрузка/сброс счетчика инвертирует выход.
Вот такая, вкратце, разница. Если учесть, что в AY полное обновление регистра периода осуществляется в 2 прохода (в общем случае), то картина начинает усложняться. Что при этом делается при генерации шума, я не понял, но вероятно он может получиться другим, нежели по привычной схеме эмуляции. Однако такой механизм работы со счетчиками логично распространить на всю микросхему.
В принципе, в пределах ~20 ms периода обновления регистров AY это не каждый услышит. Но вспомним, как нам нравилось изголяться со звуком на Beeper? Тяжко, но прикольно, если постараться. А тут - целых 3 независимых канала, у каждого своя громкость, можно точно рассчитать и промодулировать меандр AY чем-нибудь этаким.
И вот тут любому станет слышно, при какой эмуляции звучит правильно, а при какой - не очень :biggrin:.

---------- Post added at 06:29 ---------- Previous post was at 06:12 ----------

Блин, ссылку надо найти...

ARTi
31.08.2011, 10:01
psb
Не Вы ли сказали "спасибо" автору этой темы (http://zx.pk.ru/showthread.php?t=12086)? Там про это есть, Вы и забыли. А теперь и вовсе Вам "не верится". Ай-яй-яй!
Ссылка, конечно, не та, ибо это не источник, но все же. Позже может найду то, что надо. Но по крайней мере, мне это не приснилось, а то я уже засомневался :biggrin:.

psb
31.08.2011, 13:52
ARTi, ту тему я прекрасно помню:) вопрос-то у вас должен стоять не в + или - крутится счетчик, а каким образом происходит сравнение и есть ли теневой регистр.

---------- Post added at 15:52 ---------- Previous post was at 15:49 ----------


На блок-схемах красуется 4 отдельных независимых блока, а на деле он один. И ерраты молчат как рыбы об лед! И кто здесь кому чего должен?! Ведь написано же! И даже нарисовано - сами знаете для кого!!
не знаю, о чем именно речь, но если реально в даташите написано про 4 блока (даже если внимательно почитать!), это значит что они там ДОЛЖНЫ быть, а иначе вас просто ... обманули. можете жаловаться:)

ARTi
02.09.2011, 11:29
Так что насчет выбора несуществующих регистров в реальных AY?
В даташите написано, черным по белому, что при выборе регистра, в номере которого старшие 4 разряда не нули, ничего не произойдет, т.е. даже регистр выбран не будет.
Тем не менее, в эмуляторах при выборе регистра AY делается &= 0x0F, что, очевидно, означает, что старшие 4 разряда номера регистра не имеют значения. Кривые эмуляторы? А как насчет этой темы (http://zx-pk.ru/showthread.php?t=9302)? Определение типа установленного муз. процессора (AY или YM) основано, как я понял, как раз на том, что при выборе регистра в AY старшие 4 бита номера регистра отбрасываются, а в Yamaha - нет. И приведенные листинги предназначены для реалов.
Итого,

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

Black_Cat
02.09.2011, 21:24
В даташите написано, черным по белому, что при выборе регистра, в номере которого старшие 4 разряда не нули, ничего не произойдет, т.е. даже регистр выбран не будет.да, должно быть так


Определение типа установленного муз. процессора (AY или YM) основано, как я понял, как раз на том, что при выборе регистра в AY старшие 4 бита номера регистра отбрасываются, а в Yamaha - нев этом случае AY нельзя было бы ставить в турбосаунд, а такого я чёт не слышал