Имею конкретный вопрос по работе ВГ75, определяющий можно ли без введения хитроумного узла регенерации, ставить в РК86 большие SIMM.
Ранее, исходя из того, что в реале ВГ75 тормозит на 25%, тогда как по расчёту на основе имеющихся данных должна тормозить лишь на 7%, я предполал, что ВГ75 читает память в каждой линии растра, а не один раз за строку, т.е за 10 линий растра (отчего авторы ВГ75 попадают в категорию идиотов).
27% получаются из расчета: одно считывание 78-ми байт за всю строку, т.е за время вывода всех 10-ти линий растра, один байт передаётся за 4 такта и ВГ75 использует единожды считанное содержимое строки для вывода всех 10-ти линий растра. Вот расчёт:
100 * (78:1.77)*4 : ( 64*10)= 27.6%
Даже, если откорректировать расчёт с учётом, якобы обнаруженных в этой теме потерь 4-х тактов при пересылке каждой посылки из 8-ми байт, то получается дополнительная потеря 9*4=36 тактов 1.77 МГЦ (ПДП у нас на такте 1.77). Девять - это число посылок за которые пересылается строка в 78 байтов. Тогда получается вот такой расчёт:
100 * ((4*78+9*4) : 1.77) : ( 64*10)= 10%
Но никак не 25%. Таким образом, после прочтения этой темы, дело запуталось ещё больше. Теперь уже никто не знает, считывает ли ВГ75 требуемые 78 байтов один раз за строку из 10 линий, или делает это многократно, считывая какие-то куски строки для каких-то линий повторно. Тогда интересно, по какому алгоритму? Хотелось бы знать какие считанные байты и в каких строках используются повторно, а какие считываются всякий раз заново?
После расчёта, с учётом новых данных, я пришёл к выводу, что считывать байты для каждой линии растра ВГ75 не может. Т.к (78+9*4):1.77=64.4 МКСЕК, что даже больше строчного периода в 64 МКСЕК, т.е если бы ВГ75 читал для каждой линии растра, то прогон программы происходил бы только во время одной строки обратного хода по кадрам и быстродействие КР580 упало бы в 31 раз и составило бы 1.77:31= 57 КГЦ, а РК реально даёт не менее 1.3 МГЦ.
И объяснение, что тут предлагают, а именно - то что для одних линий считанные байты строки используются повторно, а для других считываются заново, - мне кажется полной ерундой. Логично только или одно считывание на всю строку или считывание для каждой линии растра, что как доказал расчёт невозможно. Отбросив невозможное, остаётся истина. Вывод: ВГ75 считывает строку только один раз и использует эти данные для вывода всех 10-ти линий растра строки (отчего авторы ВГ75 перестают быть идиотами).
Куда же ПДП тратит время. Тогда логично предположить, что ВТ57 тратит на пересылку байта из ОЗУ в ВГ75 не один такт, а два. Если ВТ57 тратит 2 такта на байт и никаких потерь по 4 байта на посылку нет, тогда:
100 * ((78*2) : 1.77) : ( 64*10)= 24%
А вот это уже близко к реальным 25%. Ещё 2 процента набежит из-за несинхронности ВГ75 и ВТ57, но КР580 немного отыграет за время вывода единственной строки за время обратного хода по кадрам, когда РК86 работает на полной скорости 1.77 МГЦ, без захватов шины.
Кстати, вот сколько РК86 отыгрывает на единственной строке гашения по кадрам.
(76*30 + 100*1) : 76*31= 1.0102
Т.е благодаря отсутствию захватов шины во время единственной строки гашения по кадрам выигрывается 1 процент быстродействия. Таким образом, одна погашенная строка добавляет к быстродействию 0.0102*1.77 МГЦ = 18.1 килогерц. А вот целых 4 погашенных строки ускоряют прогов в:
(76*27 + 100*4) : 76*31=1.0407 раза.
Четыре погашенные строки добавляют к быстродействию 4 процента, что соответствует приросту реального такта в 0.0407*1.77 МГЦ = 72.1 килогерца. А абсолютный выигрыш относительно стандартного режима составит 72.1-18.1= 54 КГЦ.
Кстати установка кода F1 в конце строки в позиции 8+64=72, только экономит 5 байтов, но не даёт ускорения, т.к последняя посылка все-равно читает 8 байтов. Вот если поставить F1 в позиции 8*8-1=63, то девятая посылка ВОЗМОЖНО не будет читаться. Хотя, скорее всего, всё-равно будет читаться, т.к оценку содержимого строки делает вероятно схема вывода, а не схема загрузки буфера.
Кто-нибудь может проверить в реале или по документации, сколько тактов на байт тратит при пересылках ВТ57? Ясно, что два, иначе времена не сходятся.
Моя идея регенерации SIMM была основана на том, что ВГ75 читает строку для каждой линии растра, таким образом за строку ОЗУ в одних и тех же ячейках регенерируется 10 раз. Идея заключалась в использовании того, что т.к сигналы LC0, LC1, LC2, подаваемые на ПЗУ фонта, меняются при каждой линии растра, то используя эти сигналы как A8, A9, A10 для мультиплексора регенерации, можно будет без потерь регенерировать параллельный экрану SIMM. Тогда при чтении ВГ75 первой линии регенерируется один столбец, на следующей линии другой и т.д. Но если ВГ75 читает за строку каждый символ строки только 1 раз, то идея вообще не работает, - прощайте большие SIMM в РК86, - тогда, увы, остаётся наращивать ОЗУ за счёт моря параллельных банок РУ5-тых... Как видите для аппаратных модернизаций РК86 нужны точные знания как работает его железо.
Итак, может кто-нибудь "пролить свет" на число считываний на строке, привести более правдоподобный расчёт реальной скорости РК86? От правильного ответа на этот вопрос зависит и работа программ, для которые считают такты...




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