Частота процессора, частота видео, и частота таймера, сидящего на векторе 100, в общем случае друг от друга никак не должны зависеть. Так как оно есть сейчас - это всего лишь частный случай, реализованный в БК.
В общем виде - ВЕ таймер он как бы вещь в себе и должен работать строго традиционно, как показал реверсинг. Он не должен использоваться (да и не используется) для синхронизации чего либо, а на БК10 используется от безысходности, потому что там просто ничего другого нет. В том виде, в каком он сделан в ВМ1, он годится для подсчёта временных интервалов в тактах процессора и проведения разных измерений в попугаях (например ТЧ процессора при константной латентности ОЗУ). Чтобы этот таймер годился на что-то большее, надо вернуть ему урезанный или вообще не получившийся у разработчиков функционал, который ими был задуман (хотя бы генерацию прерывания).
Таймер по вектору 100 - это KW11-L, по идее он должен работать с частотой строго 50Гц (с частотой электрической сети), но для упрощения конструкции БК11 использована примерно совпадающая частота видеоконтроллера ВП1-037 48.5Гц. Вот именно он и используется для синхронизации всего, чего можно. Не надо в новом изделии их привязывать друг к другу, а реализовать два разных модуля - отдельно таймер 50Гц, и отдельно видеоконтроллер, с различными режимами и частотами. Причём так же отдельно от модуля CPU.
При этом станет возможно варьировать частоты CPU и видео с максимально возможным сохранением совместимости старого софта с новым быстрым железом. По крайней мере игр с музыкой на AY - там скорость синхронизируется таймером 50Гц (хотя и в этом у меня есть сомнения, но если что - это патчится, было бы с чем засинхронизироваться).
При этом разного рода БКшные демки будут показывать свои эффекты только при точнейшем сохранении всех задержек на МПИ, которые создаёт ВП1-037.
Вся синхронизация с ходом луча и прочие спецэффекты делались методом подбора последовательностей команд типа bit (r1),(r1)
cmp @(r1)+,r1 cmp (r1),0(r1) - т.е. экспериментальным путём подбиралось количество команд и методы адресаций, которые давали подходящую задержку во времени. Если изменить латентность памяти - то все демки пойдут вразнос. Да и если частоту проца изменить или микрокод оптимизировать - тоже. Поэтому нужно либо делать реплику 1:1, либо забить на совместимость с некоторыми разновидностями программ.




Ответить с цитированием
