1 Отредактировано garnizon (07-01-2018 02:28)

Тема: Про динамик в девятке и семёрке

Как-то обсуждали с Володей почему в версии PUSHERа 93 года нет звука при раздвигающихся полосках, оказалось что обращение к динамику там выполняется записью:

Мне неоднократно попадались проги, которые имели почему-то звук именно через запись, а не чтение.
В доках (специально вчера порылся) везде говорится одно и то же: "любое обращение к ячейкам C03x". Но я помню по себе, что звук был нормальный только при чтении. Вчера - так же специально - порылся по схеме девятки: там отчетливо видно, что группа портов Cxxx обслуживается одной группой микросхем, которая ведёт себя, предположительно, так: при любом возникновении на шине адреса заданного порта & определённой фазе тактового сигнала.

1 МГц мерцает сначала сигнал групп третьего разряда (CnXX), потом, если n = 0, второго разряда (C0mX), потом, если m = 6 - первого (C06X). Это цепочка, действующая по одному и тому же правилу. Почти все переключатели этих групп, по смыслу, могут срабатывать как один так и несколько раз подряд, без ущерба для функционирования устройств. Например: если строб клавиатуры (C01X) приходит не один раз, а дважды - это ничего не меняет: нет разницы, сбросить порт один раз или два подряд. Или даже три.

Но звук (как и запись на магнитофон), построены так, что им важно количество обращений. Звук формируется триггером, который перебрасывается в противоположное текущему состояние, на каждое обращение. Соответственно, диффузор динамика на каждое, например, LDA $C030 будет дёргаться в разные стороны.

Но с командами записи, например, STA $C030, всё немного сложнее: процессор формирует два обращения (или 4?) на один и тот же адрес. Получается, что диффузор в начале команды дёргается в одну сторону, а в конце - сразу - в другую. Команда длится около 4, что ли, тактов, т.е. время между рывками составляет 2-4 мкс. Из -за механической инерционности, он, скорее всего, почти не сдвинется с места за столь короткий промежуток времени. Реально, мне так вспоминается, звук при этом можно было услышать, но очень тихий, и, наверное, неправильной тональности. Тут важно: если звуковой канал имеет хоть какую -то фильтрацию высоких частот (в УНЧ, например), то этот импульс до динамика вообще не дойдёт из-за очень короткого периода.

Эту идею я вчера проверил на девятке, не с реальным динамиком, а вольтметром и она вполне подтвердилась.

Почему, тем не менее, некоторые разработчики писали именно команду записи?

Может быть:

1) они получали очень тихий звук, но не догадывались, что это их ошибка.
2) может быть некоторые платы имели какую-то особенность, из -за которой  звук на команды записи формировался правильно.
3) может быть разные версии CPU имели разные графики выдачи данных на шину (это мало вероятно, т.к. есть риск того, что неправильно бы заработал контроллер 140ки).

Кроме того, я точно не знаю, что было в семёрке. Вроде бы также? но мало ли....
Могли ведь взять семёрочные процедуры и не проверить их на девятке?

В вложении две версии PUSHERа, оба диска запускаются на любой системе (7 или 9).
И например на девятке в новой версии нет звука когда раздвигаются полоски, когда человечек ходит звук шагов есть. И еще есть звук когда ставишь все ящики на место, такой свистящий (а вот свист есть только в новой версии).

Post's attachments

Attachment icon PUSHERnew.DSK 840 kb, 26 downloads since 2018-01-06 

Attachment icon PUSHERold.DSK 840 kb, 24 downloads since 2018-01-06 

2

Re: Про динамик в девятке и семёрке

garnizon пишет:

Но звук (как и запись на магнитофон), построены так, что им важно количество обращений. Звук формируется триггером, который перебрасывается в противоположное текущему состояние, на каждое обращение.

А как в Мониторе и в Васике при записи на мафон идет обращение к триггеру: LDA или STA? И какой адресацией?


garnizon пишет:

Но с командами записи, например, STA $C030, всё немного сложнее: процессор формирует два обращения (или 4?) на один и тот же адрес.

Не-не-не-не! Мы уже с Владимиром спорим об этом.
Вот пруфы:
http://forum.6502.org/download/file.php … ;mode=view (отсюда - http://forum.6502.org/viewtopic.php?f=4 … hilit=sta) - здесь прекрасно видно одно обращение (при STA $0D00)
http://www.emuverse.ru/wiki/MOS_Technol … ема_команд
http://www.defence-force.org/computing/ … /annexe_2/
http://www.westerndesigncenter.com/wdc/ … 5c816s.pdf

Абсолютная адресация, 4 такта, что LDA, что STA. Один такт - выборка опкода. Два такта - два байта-операнда - выборка адреса аргумента. Из общих 4 тактов остался один - выборка аргумента.


garnizon пишет:

Почему, тем не менее, некоторые разработчики писали именно команду записи?

Каюсь - раньше тикал спикером записью, уже давно тикаю BIT $C030.


garnizon пишет:

2) может быть некоторые платы имели какую-то особенность, из -за которой  звук на команды записи формировался правильно.

Дас ист фантастиш!


garnizon пишет:

3) может быть разные версии CPU имели разные графики выдачи данных на шину (это мало вероятно, т.к. есть риск того, что неправильно бы заработал контроллер 140ки).

Дас ист фантастиш!

Турбо АГАТ-9/16 (65C802 CPU, 2.8 Маха), MSX2 Yamaha YIS503IIIR.

3

Re: Про динамик в девятке и семёрке

> В вложении две версии PUSHERа, оба диска запускаются на любой системе (7 или 9).
И например на девятке в новой версии нет звука когда раздвигаются полоски, когда человечек ходит звук шагов есть. И еще есть звук когда ставишь все ящики на место, такой свистящий (а вот свист есть только в новой версии).


Я вот че-то от этой фразы вовсе запутался: мне так помнится, что вопрос у тебя изначально (ещё когда мы в аське обсуждали) был о том, почему звук есть на семёрке, но нет на девятке.
Ну, допустим у меня склероз и вопрос задан как-то по другому.

Но вот тут (сейчас) не ясно: одна версия имеет звук , другая - нет. А почему не предположить, что его просто нет там (ну то есть в новой версии) ?

4 Отредактировано garnizon (07-01-2018 12:18)

Re: Про динамик в девятке и семёрке

Звука нет и на семерке и на девятке (на реале проверялось), ну точнее именно звука раздвигающихся полосок. И вот почему было сделано записью и почему при таком раскладе он пропал и есть вопрос.
Т.е. в обсуждении в аське - мы почему-то пришли к мнению что Роман Бадер много где переделал на запись.
Но вот моя девятке, не смотря на теорию, молчит как партизан когда записью. Или где-то там чего-то шуршит - я сперва подумал что у соседей за стенкой агат :)

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

Ведь вопрос совсем не в пушере или какой-то там еще проге. Хотелось бы понять различаются ли в этом смысле агаты разных исполнений и заводов.

5 Отредактировано garnizon (07-01-2018 12:43)

Re: Про динамик в девятке и семёрке

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

Но что-то подсказывает что у семерки и девятки есть разница неочевидная.
Я не про те случаи как Shamus, там для звука таймер используется, соответственно, он вектора неправильно ставил для девятки.

А вот например STAR BLAZER , проверено на реалах - в девятке звук есть, а в семерке нет.

6 Отредактировано LeoN (08-01-2018 03:02)

Re: Про динамик в девятке и семёрке

Voldemar0 пишет:
LeoN пишет:
Voldemar0 пишет:

Проверял, смотрел, как осцилографом на своём устройстве так и на триггере звука вольтметром.

Какая адресация была для STA?

понял, там была какая-то из индексных.
На прямой (8D), действительно, один импульс

ЧИТД!


Voldemar0 пишет:

я проверил сейчас: звук на одной конкретной плате работает именно по regsel: т.е. lda , похоже даже индексная:
FE18- B1 3C .. LDA (3C), Y
при обращении даёт один переход триггера звука

Пруф говорит, что "LDA (zp),Y" - 5* тактов: 1 такт - выборка опкода, 1 такт - выборка байта-операнда 0-й страницы, 2 такта - выборка абсолютного адреса из 0-й страницы, 1 такт - выборка аргумента по эффективному адресу (абсолютный + индекс). То есть одно обращение в последнем такте. * - если же индекс пересекает страницу (в эффективном адресе), то добавляется предпоследний такт с невалидным адресом - получаем 2 обращения.


Voldemar0 пишет:

но sta:
FE46- 91 40 .. STA (40), Y
даёт два перехода

В этом пруфе (стр. 43, 13 метод адресации) сказано, что "STA (zp),Y" - 6 тактов: 1 такт - выборка опкода, 1 такт - выборка байта-операнда 0-й страницы, 2 такта - выборка абсолютного адреса из 0-й страницы, 1 такт - невалидное чтение (потому что запись STA), 1 такт - выборка аргумента по эффективному адресу (абсолютный + индекс). Итого - два обращения в последних двух тактах.


Voldemar0 пишет:

при этом :
3000- 8D 30 C0 STA C030
даёт один переход

Абсолют уже показывал... При таком обращении к триггеру глюка не должно быть.


PS. Как говорится, одна голова - хорошо, а Змей-Горыныч - лучше! ;)  "Адназначна!!!" (C)

Турбо АГАТ-9/16 (65C802 CPU, 2.8 Маха), MSX2 Yamaha YIS503IIIR.