|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
ПДП в РК для обновления динамического ОЗУ
Author |
Message |
begoon
Senior
Joined: 22 Aug 2012 17:06 Posts: 144 Location: 188.220.42.216
|
Коллеги, проведите, пожалуйста, ликбез для человека, не очень глубоко разбирающегося схемотехнике.
Говорится, что в РК контроллер ПДП ИК57 (i8257) кроме задачи периодической пересылки видео области из ОЗУ в контроллер дисплея ВГ75, используется также для регенерации ОЗУ.
КАК ИМЕННО это происходит?
Я прочитал, что ОЗУ (скажем базовые 16КБ) "освежается" строками по 128 байт, то есть для обновления всех 16КБ нужно пробежать все значения от 00 до 7F по линиями A0-A6 и для каждого значения еще выставить RAS. Обновление каждой строки должно длиться не более 2мс.
Это мне понятно. Что мне НЕ понятно, как именно это "пробегание значений" организовано?
Монитор явно программирует ПДП только для работы с видео областью, по конкретным адресам. Ни какой речи о всей памяти тут не идет.
Видимо, обновление ОЗУ - это какой-то побочный эффект особого использования сигналов микросхемы ПДП, когда она пересылает видео область, так?
|
12 Mar 2021 03:48 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 863
|
Ну, ПДП вроде как считывает из ОЗУ, этого достаточно. Другое дело, как адресацию организовать: младшие биты адреса как раз и будут задаваться по RAS, то есть достаточно подряд 128 байт считать. Экран гораздо больше. Главное, чтобы за время обратного хода луча ничего не потерялось.
А вот когда идёт чтение с магнитофона, то ПДП отключается, и подпрограмма чтения в это время вынуждена читать из памяти командой POP PSW.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
12 Mar 2021 05:27 |
|
|
Paguo-86PK
Maniac
Joined: 12 Apr 2011 20:43 Posts: 267 Location: Tashkent
|
Вoт если бы удалось в эмуляторе как-то реализовать разрушение данных в ОЗУ при неправильной регенерации - это было бы чудо! Сталкивался с этим, когда пытался отключать/программировать ПДП при написании сэмплера.
|
12 Mar 2021 08:05 |
|
|
begoon
Senior
Joined: 22 Aug 2012 17:06 Posts: 144 Location: 188.220.42.216
|
А как этот трюк с POP PSW помогаем память регенерировать? Вот кусок начала вывода байта. Судя по коду, в начале SP всегда начинается с адреса 0000 и потом начинает увеличиться. То есть проходятся адреса всегда начиная с нуля. А как же остальные ячейки?
|
12 Mar 2021 11:57 |
|
|
Paguo-86PK
Maniac
Joined: 12 Apr 2011 20:43 Posts: 267 Location: Tashkent
|
Микросхемы ОЗУ РУ3 это матрицы 128×128. По RAS считывается вся строка в 128 бит и перезаписывается (внутри ОЗУ) обратно. А по CAS из этих считанных 128 бит выбирается один. Конкретно в РАДИО-86РК буфер экрана 78×30 и размер символа 6×10 выбраны именно исходя из требований к надёжной регенерации. То есть, конкретно 80 символов в строке нельзя было делать из-за привязки к периоду регенерации. Тем самым, исходя из формул по вычислению периода установки флага IR можно примерно знать и конкретный цикл регенерации, реализованный в РК. Моя утилита «ПСИХ» так и работает. В ней код располагается порциями по 28 байтов. При отключении ПДП регенерация остальных 100 байтов не производится, а ВГ75 настраивается на отображение буфера в 28 байтов. А те 100 байтов, которые не регенерировались установленный пользователем интервал, потом отображаются справа, на месте инструкции, текст которой должен постепенно рандомно забиться 0xFF. Идея «ПСИХа» довольно давняя, но реализовать удалось лишь недавно: Сложные там трюки! В эмуляторе разрушение данных в ОЗУ можно симулировать вставкой примерно подобного цикла: "Самый простой способ" Только это довольно затратный способ, хотя и более-менее точный. Можно оптимизировать до: "Менее затратный способ" Для повышения производительность можно и цикл развернуть: "Оптимизированный по скорости вариант" Где «refresh_period», исходя из паспортных данных РУ3, должен быть ≤2 ms (здесь соотношение меняется от >2 на ≤2, исходя из описания цикла регенерации)… P.S.: Все три примера - с потолка и не гарантирую, что рабочие. Просто описал суть алгоритма разрушения данных так, как понимаю сам по опыту. И не учитывается паразитная миграция заряда по ячейкам матрицы ЗУ (как в обсуждении РУ6 в качестве ПЗС). Инженеры могут высмеять мой приём…
|
12 Mar 2021 12:31 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Этот трюк с POP PSW как раз и перебирает по 2 адреса за раз чтением... вместо ПДП. Где-то, кажется в Радио, в своё время объясняли этот трюк, там программа по тактам написана так, что при переборе адресов через POP PSW информация в ОЗУ не должна потеряться. POP PSW - просто удобная команда для этого: и чтение, и увеличение адресов одновременно. Причем очевидно, что чтение - фиктивное:
_________________ iLavr
|
13 Mar 2021 00:22 |
|
|
begoon
Senior
Joined: 22 Aug 2012 17:06 Posts: 144 Location: 188.220.42.216
|
| | | | Lavr wrote: Этот трюк с POP PSW как раз и перебирает по 2 адреса за раз чтением... вместо ПДП. Где-то, кажется в Радио, в своё время объясняли этот трюк, там программа по тактам написана так, что при переборе адресов через POP PSW информация в ОЗУ не должна потеряться. POP PSW - просто удобная команда для этого: и чтение, и увеличение адресов одновременно. Причем очевидно, что чтение - фиктивное: | | | | |
Может я туповат или просто совсем не понимаю схемотехники. Например, выводим один байт. Это 8 бит. Трюк с POP PSW повторится 16 раз (8 байт по два фронта на каждый, итого 16). В начале SP=0. После 16-ти POP PSW, SP пробежит значения от 0 до 32 (16 раз инкремент по 2). То есть этими POP PSW будут неявно прочитаны ячейки от 0000 до 0020h. А как же ВСЯ остальная память? Причем для каждого нового байта SP снова будет работать по тем же ячейкам 0000 до 0020h.
|
13 Mar 2021 04:33 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Заметим... не я это сказал... А для всей остальной памяти снова включается ПДП, насколько я вижу... Но "самодельную регенерацию" перед этим, похоже, доигрывают:
_________________ iLavr
|
13 Mar 2021 07:33 |
|
|
Paguo-86PK
Maniac
Joined: 12 Apr 2011 20:43 Posts: 267 Location: Tashkent
|
Сущeствуют константы скорости ввода/вывода магнитофона. При задержке POP PSW также выполняется - 29×8 = 148 раз - 296 ячеек обновляется. Если интересует детализация по тактам, то здесь подробно всё расписано: | | | | Code: WRBYTE: PUSH H ; 11 {{ PUSH B ; 11 PUSH D ; 11 PUSH A ; 11 MVI A,80H ; 7 STA VT_57+8 ; 13 LXI H,0 ; 10 DAD SP ; 11 LXI SP,0 ; 10 MVI D,8 ; 7 }} = 95 AFC58: POP PSW ; 10 {{ MOV A,C ; 5 RLC ; 4 MOV C,A ; 5 MVI A,1 ; 7 XRA C ; 4 STA VV_55+2 ; 13 LDA KNS_WR ; 13 MOV B,A ; 5 }} = 66 :: x8 = 528 AFC66: POP PSW ; 10 {{ DCR B ; 5 JNZ AFC66 ; 10 }} = 25 * KNS_WR :: x8 = 200 * KNS_WR MVI A,0 ; 7 {{ XRA C ; 4 STA VV_55+2 ; 13 DCR D ; 5 LDA KNS_WR ; 13 JNZ AFC7A ; 10 SUI 14 ; 7 AFC7A: MOV B,A ; 5 }} = 57 / 64 :: x8 = 520 AFC7B: POP PSW ; 10 {{ DCR B ; 5 JNZ AFC7B ; 10 }} = 25 * KNS_WR:25 * (KNS_WR - 14) + 7 :: x8 = 200 * KNS_WR - 350 INR D ; 5 {{ DCR D ; 5 JNZ AFC58 ; 10 }} = 20 :: x8 = 160 SPHL ; 5 {{ LXI H,VT_57+4 ; 10 MVI M,0D0H ; 11 MVI M,76H ; 11 INX H ; 5 MVI M,23H ; 11 MVI M,49H ; 11 MVI A,27H ; 7 STA VG_75+1 ; 13 MVI A,0E0H ; 7 STA VG_75+1 ; 13 MVI L,8 ; 7 MVI M,0A4H ; 11 POP PSW ; 10 POPDBH: POP D ; 10 POP B ; 10 POP H ; 10 RET ; 10 }} = 179 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; = 1482 + 376.667 * KNS_WR | | | | |
Last edited by Paguo-86PK on 13 Mar 2021 08:11, edited 1 time in total.
|
13 Mar 2021 08:03 |
|
|
begoon
Senior
Joined: 22 Aug 2012 17:06 Posts: 144 Location: 188.220.42.216
|
Ответь мне на простой вопрос: зачем при выводе (или вводе) ЛЮБОГО байта пробегать одни и те же 32 байта от 0000 до 001F? Как именно это решает вопрос регенерации ВСЕЙ памяти?
|
13 Mar 2021 08:05 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ты просто не понял - выше тебе всё подробно расписали... Не 32 байта, а 32 строки, но реально гораздо больше:
_________________ iLavr
|
13 Mar 2021 08:15 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 863
|
Ага, доигрывают, ожидая записи второго полубита.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
14 Mar 2021 11:31 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 863
|
Кстати, если кто не понял, зачем там SUI 14, то это потому-что последний полубит нужно ожидать чуть меньше, т.к. после окончания цикла идёт настройка ПДП, да и вообще, накладные расходы на вход/выход из процедуры.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
14 Mar 2021 11:35 |
|
|
Paguo-86PK
Maniac
Joined: 12 Apr 2011 20:43 Posts: 267 Location: Tashkent
|
И именнo потому константу вывода ставить меньше 15 нельзя. Вообще-то разработчики РК могли бы поступить иначе: Пропускать ADI 14 в конце. Тогда бы константы чтения/записи можно было бы указывать от единицы…
|
14 Mar 2021 11:40 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 863
|
Вот не понял ты всё-таки, зачем последний полубит в конце должен быть "как бы короче".
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
14 Mar 2021 11:59 |
|
|
Who is online |
Users browsing this forum: Hammer and 91 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|