Тема: Pusher
Как-то обсуждали с Володей почему в версии 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).
Звук когда раздвигаются полоски есть только в старой версии.
Шаги озвучиваются во всех версиях, как и момент постановки ящика на место.
Свистящий звук о окончании уровня есть только в новой версии.