PC-01 Lviv
http://pc01.lviv.ua/forum/

Торможение при обращении к ОЗУ
http://pc01.lviv.ua/forum/viewtopic.php?f=2&t=196
Page 1 of 2

Author:  ivagor [ 13 Oct 2012, 15:25 ]
Post subject:  Торможение при обращении к ОЗУ

Поскольку вопрос о разности в скорости выполнения кода в ОЗУ и ПЗУ уже не единожды возникал на форуме, то я создал для него отдельную тему. Постепенно постараюсь собрать здесь и прочие реплики (или ссылки на них).

Между прочим, очень легко проверить наличие торможения при обращении процессора к ОЗУ (на реале).
Записываем содержимое ПЗУ "на ленту" (удобнее, несомненно прямо в WAV через звуковую карту)
Копируем содержимое ПЗУ в ОЗУ и тоже пишем его. Сравниваем в звуковом редакторе длительности и спектры. Для записи из ОЗУ длительность скорее всего будет больше, а пики в спектре левее.

UPD.
Ссылки на реплики по заданной теме:
1) Запуск эмулятора ПК-01 "Львов" на Dingoo A320
2) Неокрепшая молодёжная психика и Луркмоар :-)
3) Недостатки и недоработки ПК-01 "Львов"

Author:  b2m [ 13 Oct 2012, 19:19 ]
Post subject:  Re: Тайминги ПК-01 и растактовка команд КР580ВМ80А.

Quote:
Записываем содержимое ПЗУ "на ленту" (удобнее, несомненно прямо в WAV через звуковую карту)
Копируем содержимое ПЗУ в ОЗУ и тоже пишем его. Сравниваем в звуковом редакторе длительности и спектры. Для записи из ОЗУ длительность скорее всего будет больше, а пики в спектре левее.
Не думаю, что отличие будет значительным. Отношение количества тактов, затраченных на чтение одного байта из ОЗУ, к общему количеству тактов, затраченных на запись байта на магнитофон, ничтожно мало.

Author:  ivagor [ 14 Oct 2012, 05:57 ]
Post subject:  Re: Тайминги ПК-01 и растактовка команд КР580ВМ80А.

Согласен, что разница скорее всего будет очень маленькой, но не думаю, что она будет неизмеримой при записи 16 Кб. Это слегка похоже на обнаружение экзопланет :). Для повышения точности можно провести каждый "эксперимент" по 2-3 раза.
Но можно предложить и более четкий вариант - сначала воспроизвести звук с использованием процедуры ПЗУ (даже можно из бейсика через SOUND), потом процедурой из ОЗУ, задав D и L и использовав фрагмент аналогичный DE94-DEBE.

Author:  liberation [ 14 Oct 2012, 10:00 ]
Post subject:  Re: Торможение при обращении к ОЗУ

Quote:
Но можно предложить и более четкий вариант - сначала воспроизвести звук с использованием процедуры ПЗУ (даже можно из бейсика через SOUND), потом процедурой из ОЗУ, задав D и L и использовав фрагмент аналогичный DE94-DEBE.
Ага, это верно замечено. Звук будет разниться.

Я уже писал, но повторюсь, что разница в скорости присутствовала. Смутно помню, что я копировал процедуры Chameleon DOS в ОЗУ, после чего они переставали работать с диском из-за нехватки шустрости. Нужно было заново подбирать задержки.

Author:  b2m [ 14 Oct 2012, 12:36 ]
Post subject:  Re: Тайминги ПК-01 и растактовка команд КР580ВМ80А.

Quote:
Но можно предложить и более четкий вариант - сначала воспроизвести звук с использованием процедуры ПЗУ (даже можно из бейсика через SOUND), потом процедурой из ОЗУ, задав D и L и использовав фрагмент аналогичный DE94-DEBE.
Вот тут полностью поддерживаю идею.

Author:  liberation [ 14 Oct 2012, 21:46 ]
Post subject:  Re: Торможение при обращении к ОЗУ

Но в целом я склонен думать, что решить эту загадку мы (как и прочие) сможем лишь тогда, когда в коллекцию vinxru попадет ПК-01. Наберемся терпения.

Author:  ivagor [ 15 Oct 2012, 09:12 ]
Post subject:  Re: Торможение при обращении к ОЗУ

У меня есть надежда на Tim0xу

Author:  liberation [ 15 Oct 2012, 14:17 ]
Post subject:  Re: Торможение при обращении к ОЗУ

Quote:
У меня есть надежда на Tim0xу
Теперь я и буду надеяться на Tim0xу. :)

Все-таки интересно, а из-за чего происходило такое торможение? Пока было озвучено одно предположение:
Quote:
2) Разные и некратные частоты CPU и видеоконтроллера - это приводило к тому, что программа, выполняемая из ОЗУ работала на 30% медленнее, выполняемой из ПЗУ.
UPD.
Добавил в первом посте ссылок по теме.

Author:  liberation [ 17 Oct 2012, 10:12 ]
Post subject:  Re: Торможение при обращении к ОЗУ

Завеса тайны над торможением пала. Достаточно было внимательно пересмотреть наличные материалы. И перечитать тему "Upgrade ПК-01 "Львов", где упоминается доработка под названием "турбирование". Ее суть проста:
Quote:
Турбирование. Эта доработка проста и не требует никаких дополнительных деталей. Сводится она к уменьшению задержки при работе процессора с ОЗУ. Доработка была опробована с Z80.
А если обратиться к классическому труду "ПК-02 "Львов" своими руками", то там мы найдем несколько любопытных деталей:
Quote:
Эта доработка проста и не требует никаких дополнительных деталей. Сводится она к уменьшению задержки при работе процессора с ОЗУ. Доработка была опробована с Z80.

9 D50 отрезать от всего.
Отрезанную от 9-ой ножки дорожку соединить с 10 ножкой этой же микросхемы.
11 D5 отрезать от всего (кроме проводка, идущего к ней от Z80).
11 D5 соединить с 13 (150 нс.), 14 (100 нс.) или 15 (50 нс.) ножкой D50.

В зависимости от того, с какой ножкой микросхемы D50 Вы соедините 11 D5, скорость выполнения программы будет меняться. На первый взгляд, эта доработка почти незаметна, но потом Вы поймете, как Вам ее недоставало…

После выполнения последней доработки рекомендую «погонять» ПК и убедиться, что он не сбоит. Этому могут способствовать «дубовые» КР565РУ5Д — микросхемы основного ОЗУ.
И там же:
Quote:
Если Вы удовлетворились работой Z80, то Вы можете еще слегка поднять скорость работы Вашего ПК (на 10 – 25 %).
10-25%! Какой же все-таки ПК-01 был ПК-01... :shock:

Author:  ivagor [ 17 Oct 2012, 11:09 ]
Post subject:  Re: Торможение при обращении к ОЗУ

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

Author:  kapitan [ 03 Oct 2014, 08:24 ]
Post subject:  Re: Торможение при обращении к ОЗУ

Диспетчер памяти работает таким образом:

идут циклы доступа к ОЗУ строго последовательно
CPU VIDEO по 400 ns
видео свои циклы не пропускает,
CPU живет своей жизнью и может захотеть ОЗУ в любой момент,
тогда ему приходится ждать своего цикла как повезет до 400 нс + выход из wait state
фактическое торможение программы теоретически предсказать нельзя и можно только точно померять в среднем

теперь про ПЗУ:
замедлялка процессора срабатывает при любом обращении ниже адреса С000

т.о. доступ к ПЗУ всегда идет быстро, но (!) поскольку программы в ПЗУ лазят в ОЗУ, то фактически тоже будут тормоза. Не такие большие, но существенные для задач реального времени типа MFM.
Опять же, предсказать теоретически как будет тормозить - невозможно,
только мерять среднее.

Поскольку 8080 дублирует на старшие адреса, младшие адреса команд IN & OUT имеем артефакт с застреванием младших портов.
может экономили на элементах, а может просто забыли допилить диспетчер для игнорирования доступа к портам.

Тем неменее: у львова самая красивая и правильная схемотехника из всего совкового, что я видел.

Author:  liberation [ 03 Oct 2014, 09:40 ]
Post subject:  Re: Торможение при обращении к ОЗУ

Quote:
Опять же, предсказать теоретически как будет тормозить - невозможно,
только мерять среднее.
Хаотическое притормаживание при обращении к ОЗУ - это сильный ход. Для полноты картины приведу цитату из исходников горячо любимого MESS:
Quote:
When the CPU accesses RAM, wait states are inserted until the RAM transfer is complete.

CPU clock: 18MHz/9 = 2MHz
memory cycle time: 20MHz/8 = 2.5MHz
CPU memory access time: (min) approx. 9/20MHz = 450ns
(max) approx. 25/20MHz = 1250ns
pixel clock: 20MHz/4 = 5MHz

Author:  Zelya [ 03 Oct 2014, 11:25 ]
Post subject:  Re: Торможение при обращении к ОЗУ

Извините, я немного не понял. Видео доступается до ОЗУ, замораживая доступ на 400 мс. на адреса ниже С000. Потом, как я понял, открывается окно для проца, правильно? Если правильно, то сколько это окно будет открытым, пока видео снова не залочит?

Author:  kapitan [ 03 Oct 2014, 17:07 ]
Post subject:  Re: Торможение при обращении к ОЗУ

нет. все немного хуже.
запрос от процессора будет обслужен в следующем окне CPU если он пришел во время окна VIDEO.
т.е. даже в самом лучшем случае он должен быть задержан на минимальное время гонок по логической схеме.
можно мосчитать сколько это наносекунд (один вентиль+один тригер ТМ2)

Author:  Zelya [ 03 Oct 2014, 17:10 ]
Post subject:  Re: Торможение при обращении к ОЗУ

Все равно не до конца понял. Я спрашиваю про окно CPU. Какое оно по размеру? Как я понял, окно видео - 400нс. В это время процессору в память лезть никак не выдет. Но когда эти 400нс проходят, открывается "окно CPU" - какое оно по продолжительности пред следующими 400нс блокировки? Хочется прикинуть шансы попадания именно в это окно.

Page 1 of 2 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/