Просмотр полной версии : Распределение банков памяти
Господа аппаратчики, а есть-ли какие физические предпосылки к тому что именно так (https://yadi.sk/i/RKuyIFwgWKZ8hg) распределены страницы и банки?
Почему именно 5-я банка падает на адреса #4000-#7FFF ?
SAM style
19.06.2019, 16:00
Как удобнее было развести старшие 2 разряда адреса, так и развели, как мне кажется
01... -> 101 (5)
10... -> 010 (2)
По поводу "медленной" памяти - так и нет ясности, какие Page быстрые, какие медленные?
Вроде INT надо держать от #8000 до #BFFF ? Ладно, это полбеды, но где-то я читал что вообще любое обращение к памяти вне этого диапазона = замедление. Это что получается, и стек и всё вообще надо крутить в этом окне? Но ведь экраны (что 5-й, что 7-й) - вне этого лежат... Получается что вообще невозможно обойтись без замедлений? Ну ладно, даже пусть так. Но всё-таки - где лучше стек держать? И как лучше выводить графику при двух экранах: В #4000 для 5-го, и #C000 для 7-го, или-же можно оба рисовать в #C000, щёлкая битом #7FFD ?
P.S Я понимаю что схемотехника на разных моделях по-разному, но хотя-бы подскажите кто знает ответы на эти вопросы для 3-х моделей (оригинальный спек, Скорпион, Пентагон) ?
Пентагон
А при чем тут пентагон , у него нет торможения ни где , во всей памяти одинаковая скорость 71680 тактов прерывание.
ZX_NOVOSIB
21.06.2019, 08:25
По поводу "медленной" памяти - так и нет ясности, какие Page быстрые, какие медленные?
Как не ясности? Вроде в zx-библиях всё разжёвано. В пентагоне нет медленных, но будет хреново если софтина будет тормозить на фирменном спектруме, это будет фейл.
DenisGrachev
21.06.2019, 08:56
По поводу "медленной" памяти - так и нет ясности, какие Page быстрые, какие медленные?
На тостере и сером +2 медленные банки 1,3,5,7
На моделях +2A,+2B,+3 медленные банки 4,5,6,7
На пентагонушке всё быстрое
Вроде INT надо держать от #8000 до #BFFF ?
Регистр I должен указывать на быструю память, иначе будет снег на моделях до серого +2A. Если у тебя подключена быстрая банка то можно и не в этом диапазоне, но как только подключишь туда медленную сразу снег появится.
Ладно, это полбеды, но где-то я читал что вообще любое обращение к памяти вне этого диапазона = замедление.
Нет, в быструю память обращение всегда быстрое :) Более того, медленная память работает с задержками только когда луч на papere.
Это что получается, и стек и всё вообще надо крутить в этом окне?
Со стеком не встречал проблем, а насчёт крутить в этом окне тут как удобнее, можно и в быстрых банках в верхней памяти, но только не забыть когда будешь их переключать свалить оттуда :)
Но ведь экраны (что 5-й, что 7-й) - вне этого лежат... Получается что вообще невозможно обойтись без замедлений?
Если будешь всё делать когда луч не на папере то можно обойтись без замедлений :)
Ну ладно, даже пусть так. Но всё-таки - где лучше стек держать?
Где хочешь, я ни разу не напоролся на проблему когда стек был в медленной памяти. Но всегда можно перестраховаться и сделать его в быструю :)
И как лучше выводить графику при двух экранах: В #4000 для 5-го, и #C000 для 7-го, или-же можно оба рисовать в #C000, щёлкая битом #7FFD ?
Как хочешь :) Как будет удобнее в коде
P.S Я понимаю что схемотехника на разных моделях по-разному, но хотя-бы подскажите кто знает ответы на эти вопросы для 3-х моделей (оригинальный спек, Скорпион, Пентагон) ?
По оригинальным спектрумам есть нетленочка:
http://hype.retroscene.org/blog/dev/130.html
http://hype.retroscene.org/blog/dev/230.html
DenisGrachev, Классный мануал.
Спасибо всем ребята, картинку в первом посте поправил, док (https://yadi.sk/i/1MWbGoLXuNKV9Q) по мануалу сделал, буду дальше разбиратся.
И чтоб не плодить темы - подкинте кто в курсе плиз внятный, "для кофейников", мануал где про регистр R и вообще что за процесс такой: "регенерация памяти", где можно схемы, но не с разбором каждого p-n перехода, а попроще, ну на уровне FBD хотя-бы (ну т.е без точной схемотехники SR-триггера, например, достаточно квадратика со входами-выходами и буквами на нём SR). В общем непонятно этот момент процессор выставляет на шину адрес IR (с целью регенерации памяти) (http://hype.retroscene.org/blog/dev/230.html)
HardWareMan
22.06.2019, 07:23
Мде. Ну ладно, бери Радио 2'95 (https://yadi.sk/d/YZBiOfhu17tTvg), там есть статья про то, что ты хочешь.
Мде. Ну ладно, бери Радио 2'95, там есть статья про то, что ты хочешь.
Спасибо, бро!
Раз ты так шаришь - подскажи плиз попутно как реализовывается в дискретной аппаратной логике эта штука (http://zxpress.ru/article.php?id=8659) ?
(про обычный счётный триггер и регистр я вроде как немного разобрался)
(если осилишь - на пальцах, для деревенщины опиши, если некогда - тыкни в путнюю ссылку...
p.s. путней считается та ссылка где написано с полной ясностью, ну для тех кто знает что это не совсем так (https://yadi.sk/i/wmxghh73lgnzdg))
- - - Добавлено - - -
И насчёт Радио 2'95 (https://yadi.sk/d/YZBiOfhu17tTvg) - неужели до сих пор не распознали в нормальный формат?
Мало энтузиастов? Стоит-ли мне заморочится, или ты просто кинул тупо ссыль на отскан?
Есть распознаные и отрисованые эти вещи?
- - - Добавлено - - -
Или там блюдут "авторские" права?
И насчёт Радио 2'95 (https://yadi.sk/d/YZBiOfhu17tTvg) - неужели до сих пор не распознали в нормальный формат?
Так пойдёт (https://yadi.sk/i/Pf9XiK9E8RtQ5g)?
Так пойдёт?
Пойдёт, спасибо.
Я или стану настоящим специалистом, или сдохну пытаясь им стать.
Вам ребята краснеть за меня не придётся, вы молодцы.
более того вспоминается один тест когда химича со значением R можно реально испортить данные в памяти
и такое возможно только на реале.
HardWareMan
22.06.2019, 15:09
Раз ты так шаришь - подскажи плиз попутно как реализовывается в дискретной аппаратной логике эта штука (http://zxpress.ru/article.php?id=8659) ?
Зачем тебе весь код Грея, если ты собрался делать энкодер? Энкодеры уже есть в МК с таймерами (энкодер является частью таймера).
- - - Добавлено - - -
более того вспоминается один тест когда химича со значением R можно реально испортить данные в памяти
и такое возможно только на реале.
Если рефреш DRAM завязан на Z80, то для порчи ОЗУ достаточно посадить его на WAIT дольше некоторого времени. Программные манипуляции с регистром R так же сработают.
Зачем тебе весь код Грея, если ты собрался делать энкодер?
Эмм... Не припомню чтоб говорил что собрался делать энкодер. И вообще к стыду своему признаюсь: даже не знаю что такое энкодер (очень смутно и ненаглядно представляю себе что это некоторое электромеханическое приспособление, позволяющее замерять и/или регулировать обороты. В общем у нас на производстве бывает электромеханик мучается с "энкондером", а я как программист чисто чекаю что там по показаниям и всё)
Код Грея мне приспичило понять чтоб разобратся наконец-то что за алгоритм я написал, который работает, но это чисто случайно, так сказать сам поражён.
А вообще понял простую вещь - чтоб программировать ПЛК надо-бы знать и аппаратную реализацию (конечно понимал это и ранее, но просто не было нужды программить всякую хрень, а теперь вот нужда заставила - попутно и разбираюсь что к чему и почему именно так реализовано. Спек для этого - хорошая поляна. Играя учимся. Как и положено. Жаль что так поздно, но чем чёрт не шутит - глядишь да разберусь, вроде пока получается)
- - - Добавлено - - -
P.S. Кстати да, чтоб не было недоразумений - реала у меня давным давно нету, и единственный опыт программно-железный был в далёком 1999 ("папа, гляди прикол, записываю в мониторе скорпа #FF, а он показывает что #FE !!!!!!)
(выбило микросхему памяти, я до этого думал что мемор по целняку строится - либо работает либо нет, а оказалось - адресно, разрядно... И покатился..)
NEO SPECTRUMAN
22.06.2019, 19:07
Если рефреш DRAM завязан на Z80, то для порчи ОЗУ достаточно посадить его на WAIT дольше некоторого времени. Программные манипуляции с регистром R так же сработают.
но программно повесить проц на вайт...
может это гдето и можно
но явно не на спектруме...
- - - Добавлено - - -
Если рефреш DRAM завязан на Z80, то для порчи ОЗУ достаточно посадить его на WAIT дольше некоторого времени. Программные манипуляции с регистром R так же сработают.
но программно повесить проц на вайт...
может это гдето и можно
но явно не на спектруме...
- - - Добавлено - - -
Длинные префиксы вроде бы тожо инкрементят R
так что ими содержимое памяти не убьешь
SAM style
22.06.2019, 20:42
Длинные префиксы вроде бы тожо инкрементят R
так что ими содержимое памяти не убьешьЗато LD R,A вполне может держать R недалеко от определённого значения, не давая инкрементиться очень сильно
NEO SPECTRUMAN
22.06.2019, 21:23
Зато LD R,A
ну это да
это как бы не единственный способ
а R инкрементится на 2+ только для (глазами) проца?
z80 выдает R для рефлеша каждый машинный цикл? (я уже не помню как там)
подчитал выдается каждый mreq
нельзя поймать "резонанс"
когда R будет все время пропускать определенные знанчения?
тем самым...
щас читаю доку
The R register is increased at every first machine cycle (M1)
тоесть как бы можно?
а потом догадайся чего что то неработает :)
только таких команд нет
команды которые инкриментят на 2
имеют префикс который имеет свой м1
пошел дальше курить доку по z80
Прекращайте други нечитабельно постить, плз!
Без этого глаза сломаты, пожалуйста бразы...
И кто из эмулей по-настоящему умеет про R ?
Если делать DI:XOR A:LD R,A:JR $-3 - что будет?
г-н (господин, не подумайте плохого!) Родионов вроде писал что ничего особого, а т.Ларченко скромно промолчал...
NEO SPECTRUMAN
22.06.2019, 22:29
DI:XOR A:LD R,A:JR $-3
чтоб похерить больше памяти на машинах там где это можно
лучшо вместо jr
воспользоваться православным jp (HL) :)
Spectramine
22.06.2019, 22:32
Прекращайте други нечитабельно постить, плз!
Без этого глаза сломаты, пожалуйста бразы...
И кто из эмулей по-настоящему умеет про R ?
Если делать DI:XOR A:LD R,A:JR $-3 - что будет?
г-н (господин, не подумайте плохого!) Родионов вроде писал что ничего особого, а т.Ларченко скромно промолчал...
Я бы тоже хотел знать. По идее, на фирменных 48к ОЗУ выше #8000 будет сыпаться частично, но вот каким образом - неизвестно. По идее, сыпанье памяти в данной ситуации эмулирует ZesarUX, но я тестил примерно таким способом, как описано выше, со включенной опцией рефреша, и нифига. Может, как-то по-другому тестить надо. А лучше на реале, конечно.
чтоб похерить больше памяти на машинах там где это можно
лучшо вместо jr
воспользоваться православным jp (HL)
"Ну товарищи, ну нельзя-же так!
Куда мы, правда, опять заехали?"
(С) Стругацкие, "Сказка о Тройке"
Это я к тому что модераторы начнут ругатся за оффтоп (наверное), я лично только рад диалогу :)
Spectramine
22.06.2019, 22:35
лучшо вместо jr
воспользоваться православным jp (HL)
Если делать нормальный код, с проверкой ОЗУ по прошествии некоторого времени, лучше JP cnd ничего нет.
Если делать нормальный код, с проверкой ОЗУ по прошествии некоторого времени, лучше JP cnd ничего нет.
А чем RET с заполненым значением RAM не катит?
(ну чисто для проверки, я не критика, я ламер любопытствующий)
NEO SPECTRUMAN
22.06.2019, 23:37
Если делать нормальный код, с проверкой ОЗУ по прошествии некоторого времени, лучше JP cnd ничего нет.
djnz нагибать ваш jp cc аж на целый такт!
ld b,0
xor a
l1
dup 62
ld r,a
edup
djnz l1
нет я знаю что с jp cc можно сделать развернутый цикл на все 16к
и тем самым свести общую задержку на каждый ld r.a к минимуму :)
13/62 = 0,20967t
14/8000 = 0,00175t
- - - Добавлено - - -
А чем RET с заполненым значением RAM не катит?
а мы можем предсказать как именно повредится память?
какие биты выпадут
какие останутсо
Spectramine
22.06.2019, 23:44
А чем RET с заполненым значением RAM не катит?
(ну чисто для проверки, я не критика, я ламер любопытствующий)
А чем катит? По времени столько же, плюс ещё возиться с заполнением ОЗУ и выставлением SP. То есть можно, но смысла в таком усложнении кода нет.
- - - Добавлено - - -
djnz нагибать ваш jp cc аж на целый такт!
Вообще да, я тоже подумал, что желательно сделать код с минимальным количеством команд, но при этом максимально тормозной, так что djnz лучше jr, jr лучше jp. Я так примерно и делал, как ты написал, емнип.
- - - Добавлено - - -
а мы можем предсказать как именно повредится память?
какие биты выпадут
какие останутсо
Не можем, поэтому память под это дело нужно было бы выделять тормозную (если бы в этом был смысл), как и под тестирующий код.
а мы можем предсказать как именно повредится память?
какие биты выпадут
какие останутсо
:)
Именно в этом и вопрос.
Процессор делает RET. Стек (это ведь внутри проца, не внешне?) стабильно декрементится. RAM заполнена (вся) одним и тем-же. Что произойдёт? По идее - циклимся и всё. Но есть ещё и ПЗУ (ой, простите, ROM) - туда-бы не попасть... В общем интересная механика, какой оп-код будет выполнятся?
В абстракцию ударились, согласен, но интересно просто...
Spectramine
22.06.2019, 23:48
Никак не соберусь сделать нормальный тест. Был бы свой спек, сделал бы, но нету, а людей напрягать это надо напрячься)
- - - Добавлено - - -
Стек (это ведь внутри проца, не внешне?) стабильно декрементится.
Не стек декрементится, а указатель стека.
NEO SPECTRUMAN
22.06.2019, 23:48
Процессор делает RET. Стек (это ведь внутри проца, не внешне?) стабильно декрементится. RAM заполнена (вся) одним и тем-же. Что произойдёт? По идее - циклимся и всё.
когда мы читаем быструю память
быстрая память регенерируется (в придачу в 100500 местах одновременно а не только что читаем)
можно проверять не повредилась ли память
только по прошествию времени
Spectramine
22.06.2019, 23:51
В абстракцию ударились, согласен, но интересно просто...
По идее ОЗУ будет утекать рандомно, так что эффекты при выставлении стека в быструю память могут быть разнообразные.
- - - Добавлено - - -
быстрая память регенерируется (в придачу в 100500 местах одновременно а не только что читаем)
Я бы сказал в 512 байтах регенерируется, с одинаковыми младшими 7ю битами адреса у всех, если я правильно понимаю. Плюс за один RET читается два байта, итого 1024 байта за один RET подпитываются.
Upd. тупанул. За вычетом ПЗУ будет 384 байта на байт и 768 байт на RET.
NEO SPECTRUMAN
22.06.2019, 23:54
Я бы сказал
смысл таков
что для правильности теста
быструю память нужно покинуть
хотя наверное лучше не допускать появлений снега и прочих глюков
оставить обработчик прерываний в пзу
и сделать DI
Spectramine
22.06.2019, 23:57
смысл таков
что для правильности теста
быструю память нужно покинуть
хотя наверное лучше не допускать появлений снега и прочих глюков
оставить обработчик прерываний в пзу
и сделать DI
Да, тестирующий код должен быть в адресах до #8000. Чтобы снега не было, не надо трогать регистр I (он и не нужен). И DI конечно нужна, куда ж без неё.
NEO SPECTRUMAN
22.06.2019, 23:59
1024 байта за один RET
ложить ret-ы бесполезно
проще ldir-ить содержимое памяти в экран
+повесить счетчик чтоб видить
и на каждом цикле увеличивать выдержку (или управление с клавиатуры)
и визуально смотреть
что утекает первым что вторым
Spectramine
23.06.2019, 00:02
Вот примерно так я и думал сделать тест в этот раз. В прошлый я просто память в эмуле просматривал, меняя время теста.
omercury
23.06.2019, 00:47
Если рефреш DRAM завязан на Z80, то для порчи ОЗУ достаточно посадить его на WAIT дольше некоторого времени. Программные манипуляции с регистром R так же сработают.
В наших клонах программно заставить память "забыть" данные невозможно - регенерацией занимается сканер экрана.
В "фирме" можно убить только "быструю" память.
Для теста не забыть, что каждое чтение будет регенерировать целую строку массива памяти, а их всего 128.
Из них несколько первых адресов успеют натикать до сброса R.
Зачем этот тест нужен не спрашиваю.
И так понятно, что ответ будет: "чтобы был")))
Spectramine
23.06.2019, 00:54
Зачем этот тест нужен не спрашиваю.
И так понятно, что ответ будет: "чтобы был")))
Мне нужен для того, чтобы сэмулировать утекание ОЗУ в Спектрумах 48.
NEO SPECTRUMAN
23.06.2019, 02:07
Зачем этот тест нужен не спрашиваю.
И так понятно, что ответ будет: "чтобы был")))
например регистром R можно пользоваться по своему усмотрению
им можно условно мерять интервалы времени
или же использовать для прибавления какого нибудь числа к А
в 7-м бите можно хранить какой нить "флаг"
но будет явно не хорошо
если поделие на фирменных спектрумах
будет зависать изза потери памяти...
- - - Добавлено - - -
"чтобы был")))
а может можно этой очисткой вообще как то воспользоваться
хотя быстрой очистки буферов так не сделаешь
по моему память помнит достаточно долго...
а тк машинку совершенствовать нельзя
ибо низя низя
то нужно искать чем же малоизвестным можно воспользоваться еще для расширения возможностей
и излишнюю нелюбовь к порту FF я тоже не понимаю
он есть
ладно когда можно было обойтись без него
но им то тоже можно хитро пользоваться
- - - Добавлено - - -
чтобы сэмулировать
скорей
чтобы симулировать
HardWareMan
23.06.2019, 07:26
В наших клонах программно заставить память "забыть" данные невозможно - регенерацией занимается сканер экрана.
В "фирме" можно убить только "быструю" память.
Я это и так знаю. Но, у меня есть два вопроса: 1. На оригинале есть системный разъем? 2. Если разъем есть, то на нем есть WAIT? Если будет два "да", тогда сценарий более чем вероятен.
omercury
23.06.2019, 08:52
например регистром R можно пользоваться по своему усмотрению
им можно условно мерять интервалы времени
или же использовать для прибавления какого нибудь числа к А
в 7-м бите можно хранить какой нить "флаг"
Если мне не изменяет мой склероз, то в бейсике R используется для генерации псевдослучайного числа (RND)
Но, у меня есть два вопроса: 1. На оригинале есть системный разъем? 2. Если разъем есть, то на нем есть WAIT?
1. Да
2. Да
3. Да, на шине есть сигнал /BUSRQ
4. Да, на шине есть сигнал /RESET
Способов достаточно
но, только не для экранной памяти.
Если мне не изменяет мой склероз, то в бейсике R используется для генерации псевдослучайного числа (RND)
Да ладно???
Мне всю жизнь казалось что бейсик весь построен на честной (и весьма неторопливой) математике, без всяких аппаратных фич...
Ну дела!
Как-же тогда умудряется работать RANDOMIZE x ?
(которое задаёт начальный сигнал для генерации того RND)
Spectramine
23.06.2019, 10:00
Возможно (пока не смотрел код ПЗУ), регистр R используется для RANDOMIZE без параметров. Но, емнип, для этого используется не регистр R, а счетчик кадров после сброса.
omercury
23.06.2019, 10:04
Да ладно???
Дык на то он и склероз...
Посмотрел дизасм ROM128, нету там чтения R. И в бинарнике 48-го нет.
Откуда я это взял?
Хотя в бинарнике Волгоградской ROM чтение R присутствует. И запись тоже.
Может это уже наши умельцы постарались...
Откуда я это взял?
Человеческое сознание, когда накапливает знания, упорядочивает их по сходству и различным связям. Регистр R и счётчик кадров во многом похожи. Тем например, что инкрементируются от времени, без явного управления основной программой. Так что, без внимательного осмысливания их различий
большой шанс их перепутать.
И, честное математическое случайное число, оно как раз аппаратно должно получаться. А если вычислительными извращениями, то это честное математическое ПСЕВДОслучайное число.
Spectramine
23.06.2019, 11:10
И, честное математическое случайное число, оно как раз аппаратно должно получаться
Ну конечно)) Программы склонны к цикличности, и значение регистра R соответственно тоже будет изменяться циклично.
omercury
23.06.2019, 11:13
Сиспеременная FRAMES имеется в виду?
Так она как раз таки явно инкременируется, в каждом прерывании. R в этом отношении более "случаен".
и значение регистра R соответственно тоже будет изменяться циклично.
Именно! :) Поэтому реальное, честное аппаратное решение, это например на тепловых эффектах.
- - - Добавлено - - -
явно
Как так "явно". Вот юзер пишет LOAD, ставит кавычки, сколько кадров явно прошло? :)
omercury
23.06.2019, 11:32
Именно! :) Поэтому реальное, честное аппаратное решение, это например на тепловых эффектах.
"белый шум"
Как так "явно". Вот юзер пишет LOAD, ставит кавычки, сколько кадров явно прошло? :)
Пока не нажмёт Enter, ровно столько же, как если б ничего не писал.
Кстати, в статье М.Буна в журнале Радио указано максимально допустимое время регенерации ячеек ОЗУ - 2 мс.
Это значение лучше смотреть в ДШ на конкретный чип.
Это время, за которое память гарантированно не утечёт.
На самом деле оно значительно больше, иногда в десятки, сотни и даже тысячи раз.
Возникает вопрос: какое максимальное время регенерации для ячеек медленной памяти?
Такое же, технология производства-то одна.
; и почему медленная память не утекает до начала рисования растра?
Потому, что счётчики рисования растра начинают работать сразу по включению питания.
Spectramine
23.06.2019, 11:39
Потому, что счётчики рисования растра начинают работать сразу по включению питания.
Счетчики же изменяются и память читается по идее только во время вывода растра? А до его начала в кадре 14335 тактов (это 4мс), за это время ОЗУ при заданном максимальном периоде регенерации 2мс должно начать утекать .
omercury
23.06.2019, 11:53
Подождите, сейчас мультик сниму.
О реалиях жизни.
периоде регенерации 2мс должно начать утекать
Возможно, 2мс параноидально заниженное число? :)
- - - Добавлено - - -
Пока не нажмёт Enter, ровно столько же, как если б ничего не писал.
Ты не смог ответить на мой вопрос конкретным числом, в этом отличие НЕявного процесса.
omercury
23.06.2019, 12:30
Память SDRAM Micron 48LC16M16A2 7.5nS Период регенерации 64mS
На столе 2 платы, обе не ПЛИС, на одной спек-128 (хост), на верхней внешняя видеокарта.
Включаю питание видеокарты, заливаю прошивку, потом включаю кнопкой хост, появляется изображение.
Выключаю хост, больше записи в видеопамять нет.
Отключаю питание видеокарточки, лезу выдирать из розетки монитор (чуть не уронил).
Отключаю все провода от плат, включая USB-Blaster, замыкаю пинцетом контакты питания - разряжаю конденсаторы.
Снова подключаю провода сначала к хосту, потом USB-Blaster, лезу под стол втыкать в розетку монитор.
Левой рукой включаю тумблером питание видео и заливаю прошивку. Появляется изображение.
Данные, конечно, деградировали, но не так, чтобы совсем.
С момента выключения тумблера до заливки прошивки прошло 48 секунд...
Мультик
https://cloud.mail.ru/public/3TEb/5etMC9ntk
- - - Добавлено - - -
Ты не смог ответить на мой вопрос конкретным числом, в этом отличие НЕявного процесса.
Такт переменной FRAMES 20mS - это в достаточной мере явное значение?
Разумеется, пока не отключены прерывания.
HardWareMan
23.06.2019, 12:44
1. Да
2. Да
3. Да, на шине есть сигнал /BUSRQ
4. Да, на шине есть сигнал /RESET
Способов достаточно
но, только не для экранной памяти.
И даже это не вызывает вопросов - любое чтение из DRAM рефрешит как минимум 1 строку за обращение. Это всё очевидные вещи. Однако, старшую память попортить реально, а ведь именно туда кладут программы из-за скорости доступа, который, как я понял из использования RFSH, имеет ZWT для Z80.
omercury
23.06.2019, 13:09
Счетчики же изменяются и память читается по идее только во время вывода растра?
Да нет, тикают постоянно, никто не будет усложнять схему и блокировать чтение на время бордера и обратного хода луча.
Чтение происходит с периодом 1/(7МГц/8)=1,14 микросекунды (на самом деле 2 чтения, но по одинаковому младшему адресу) на "фирме" даже чуть чаще.
Полное обновление памяти, то есть чтение 128 последовательных адресов, произойдёт за 32 строки или 32*64uS=2,048 милисекунды...
- - - Добавлено - - -
Однако, старшую память попортить реально,
Разумеется реально.
И для этого вовсе не обязательно использовать системный разъём, достаточно максимально часто сбрасывать R в ноль и верхняя часть каждых 128 байтов протухнет.
А лучше в R писать не 0, а какое-либо определённое число, от которого счётчик никогда не досчитает до 128, и тогда мы будем точно знать, какие именно ячейки мы целенаправленно портим.
Spectramine
23.06.2019, 13:30
Да нет, тикают постоянно, никто не будет усложнять схему и блокировать чтение на время бордера и обратного хода луча.
Насчет счетчиков не знаю, а память читается ULA-й строго во время вывода растра, иначе память бы тормозила и во время до начала вывода растра и после вывода растра. А, я так понимаю, память рефрешится строго во время её чтения.
- - - Добавлено - - -
А лучше в R писать не 0, а какое-либо определённое число, от которого счётчик никогда не досчитает до 128, и тогда мы будем точно знать, какие именно ячейки мы целенаправленно портим.
1) Счетчик с нуля никогда не досчитает до 128, ибо старший бит регистра R не участвует в инкременте.
2) В остальном не понял. Почему если писать в регистр R 0, мы не будем знать, какие ячейки мы портим? Насколько я понимаю, при записи в R нуля мы не будем портить ячейки с нулем в младших 7 битах адреса, остальные будут портиться со временем.
NEO SPECTRUMAN
23.06.2019, 13:38
ld (hl),#FF
а кто сказал что биты должны сброситься?
нужен тест на $F0
на $AA
Spectramine
23.06.2019, 13:41
Вот только хотел спросить у хардварщиков - заряженный конденсатор в памяти это единица в бите или ноль? А так в тесте можно выставить из бейсика любой байт-заполнитель.
omercury
23.06.2019, 13:47
1) Счетчик с нуля никогда не досчитает до 128, ибо старший бит регистра R не участвует в инкременте.
Он не участвует в рефреше.
Почему если писать в регистр R 0, мы не будем знать, какие ячейки мы портим?
Потому, что по каждому циклу М1 (то есть по каждой инструкции МП) происходит инкремент регистра R, до следующего его сброса он что-нибудь, да насчитает.
Насколько я понимаю, при записи в R нуля мы не будем портить ячейки с нулем в младших 7 битах адреса, остальные будут портиться со временем.
В младше ОДНОМ бите. Есть вероятность, что первый же М1 перещёлкнет R в 0x01 и рефрешь нулевого адреса мы пропустим.
При записи, например, 0x01 мы будем точно знать, что нулевой адрес мы однозначно пропустили.
- - - Добавлено - - -
Вот только хотел спросить у хардварщиков - заряженный конденсатор в памяти это единица в бите или ноль?
По-логике за счёт утечек должно быть "1".
А что мешает заполнить 0x55 или 0xAA ?
Вот только хотел спросить у хардварщиков - заряженный конденсатор в памяти это единица в бите или ноль? А так в тесте можно выставить из бейсика любой байт-заполнитель.
В NAND FLASH заряженный конденсатор - ноль, в NOR FLASH - единица.
SRAM обычно имеет характерную шахматную структуру, которая даёт на экране без процессора знаменитый "матрас". Вот в это состояние она и будет уползать при отсутствии питания. Или не будет, зависит от расположения ячеек на кристалле.
DRAM тоже имеет склонность к "матрасу", но там структура скорее линейная. Будет при отсутствии refresh уползать в ноль, в единицу, или в какой-то узор - зависит от схемотехники кристалла.
NEO SPECTRUMAN
23.06.2019, 14:01
или в какой-то узор -
как раз можно потом его выгрузить и использовать в эмуляторах
пушо при старте на экране именно этот узор
omercury
23.06.2019, 14:06
Насчет счетчиков не знаю, а память читается ULA-й строго во время вывода растра, иначе память бы тормозила и во время до начала вывода растра и после вывода растра. А, я так понимаю, память рефрешится строго во время её чтения.
А я читал с подачи NEO SPECTRUMAN, что ULA читает память аж по 4 байта за раз, то есть разрабы воткнули в неё лишние 16 регистров для буферов и усложнили автомат чтения памяти, и это при тотальной экономии на каждой пылинке кремния. Правда это была первая попавшаяся HDL корка ЮЛЫ...
Впрочем неважно, 32 строки это не отменяет.
NEO SPECTRUMAN
23.06.2019, 14:15
А я читал с подачи NEO SPECTRUMAN, что ULA читает память аж по 4 байта за раз,
я еще и виноват?
и где я такое говорил?
если что свои дурацкие посты я в основном зачеркиваю
а не удаляю
так что вполне можошь найти
omercury
23.06.2019, 14:23
и где я такое говорил?
Да вот здесь. (https://zx-pk.ru/threads/21462-bystraya-videokarta-quot-meteor-2013-quot.html?p=1016989&viewfull=1#post1016989)
Вторая ссылка.
NEO SPECTRUMAN
23.06.2019, 14:41
Да вот здесь.
Вторая ссылка.
до
сходу не понел что речь идеот про видео контролер
да и не вспомнил что он читает по 4 байта
да и чета не правильно понел суть поста...
то есть разрабы воткнули в неё лишние 16 регистров для буферов
зачем 16 регистров буферов то?
4 для считанных байт
4 или 3 для адресов
- - - Добавлено - - -
и это при тотальной экономии на каждой пылинке кремния.
дык ну место же в ней хватило
- - - Добавлено - - -
и даже для бгмерского флеша
omercury
23.06.2019, 14:48
зачем 16 регистров буферов то?
Каждый бит = регистр.
дык ну место же в ней хватило
Видишь ли mon cher, это в единичном экземпляре те 16 регистров никакого значения не имеют, а в тех партиях, которыми производились ЮЛИ, каждый транзистор выливался в десятки тысяч аглицких фунтиков. На знаю, как у Клайва с двоичной арифметикой, но денюшки он считать точно умеет.
NEO SPECTRUMAN
23.06.2019, 16:10
каждый транзистор
дык там все транзисторы из коробки
потом по заказу сверху наноситься только маска (метал)
не транзисторы
да и врятли там расход материала как то измениться при этом...
тк наверно сначала металом покрывается вся площадь кристала
- - - Добавлено - - -
вот наглядная картинка про улу
https://jpegshare.net/images/67/75/67758c30c0a97fa7ff6990d044d89c17.jpg
как бы по "металлоемкости" она не оказалась даже дороже
но выигрыш у нее в другом
- - - Добавлено - - -
На знаю, как у Клайва с двоичной арифметикой, но денюшки он считать точно умеет.
мало того с этой маской они накосячили
и первую партию в 100500 тыщ ул
они допиливали ручками и мгтф-ом :)
http://zxnext.narod.ru/pics/deadccr1.jpg
- - - Добавлено - - -
ОМФГ
я только сейчас заметил
что плата issue 1 разведена ручками с большим содержанием "бгмерских закруглений"
(сэкономеле на лЕнейках жЫ)
https://spectrumforeveryone.com/wp-content/uploads/2017/01/Issue-1.jpg
для пиляния 16к сэкономеле
даже на дырках под дополнительные 32к
- - - Добавлено - - -
я только сейчас заметил
что плата issue 1 разведена ручками с большим содержанием "бгмерских закруглений"
хотя у zx81 3 ревизии уже все было красиво
хотя может она появилась и позже
тк zx81 выпускались до 84-го
https://upload.wikimedia.org/wikipedia/commons/thumb/b/b7/Sinclair_ZX81_PCB_Top.JPG/1024px-Sinclair_ZX81_PCB_Top.JPG
Spectramine
23.06.2019, 17:56
Он не участвует в рефреше. И в инкременте тоже не участвует. Меняется только командой LD R,A, далее остается неизменным, несмотря на автоинкремент, что дает возможность хранить в нем однобитовую информацию.
Потому, что по каждому циклу М1 (то есть по каждой инструкции МП) происходит инкремент регистра R, до следующего его сброса он что-нибудь, да насчитает.Это понятно, поэтому сбрасывать нужно постоянно, тогда он будет меняться в пределах 0-1-2 в цикле, как у меня.
В младше ОДНОМ бите. Есть вероятность, что первый же М1 перещёлкнет R в 0x01 и рефрешь нулевого адреса мы пропустим.
При записи, например, 0x01 мы будем точно знать, что нулевой адрес мы однозначно пропустили.Насчет младшего одного бита не понял, а насчет рефреша - ну пропустим и пропустим, в принципе, значение R вообще можно задавать любое, лишь бы одно и то же.
По-логике за счёт утечек должно быть "1".?? То есть заряженный конденсатор означает 0, а разряженный 1?
А что мешает заполнить 0x55 или 0xAA ?Ничто не мешает. Я планирую тестить на нескольких значениях, задаваемых из бейсика.
- - - Добавлено - - -
Насчет ULA - да, она читает по 4 байта подряд (но только во время вывода растра), и да, она изначально представляет собой заготовку на N элементов, в которые нужно уложиться, так что экономить можно только на изначальном объеме микросхемы, экономить на каждом транзисторе практического смысла не имело.
Lethargeek
23.06.2019, 18:01
например регистром R можно пользоваться по своему усмотрению
им можно условно мерять интервалы времени
или же использовать для прибавления какого нибудь числа к А
в 7-м бите можно хранить какой нить "флаг"
star raiders 2 применяет R при генерации космической пыли
причём ожидает нулевой старший бит, но нигде не обнуляет его
так что если до загрузки игры записать туда единицу - пыль проглючит
Насчет счетчиков не знаю, а память читается ULA-й строго во время вывода растра, иначе память бы тормозила и во время до начала вывода растра и после вывода растра. А, я так понимаю, память рефрешится строго во время её чтения.
...и на фирменном спеке максимальный промежуток без рефреша медленной памяти (от конца до начала растра) ~7.7мс
Spectramine
23.06.2019, 18:04
..и на фирменном спеке максимальный промежуток без рефреша медленной памяти (от конца до начала растра) ~7.7мс
Вот именно. То есть явно прилично больше 2мс, указанных в статье М.Буна.
Lethargeek
23.06.2019, 18:20
...и даже, наверно, еще дольше (если брать наибольший промежуток между одинаковыми значениями рефреша) - почти целых 10мс :v2_dizzy_fear:
omercury
23.06.2019, 23:56
То есть явно прилично больше 2мс, указанных в статье М.Буна.
Нет никакого М.Буна, есть документация на микросхемы.
Хотя, справедливости ради стоит отметить, что принцип 2mS на каждые 128 адресов работает до сих пор.
И для DRAM и для SDRAM. Начиная с DDR только стали вдвое более капризны. Либо требования к качеству снизились...
...и даже, наверно, еще дольше (если брать наибольший промежуток между одинаковыми значениями рефреша) - почти целых 10мс :v2_dizzy_fear:
Вы мой мультик (https://zx-pk.ru/threads/30593-raspredelenie-bankov-pamyati.html?p=1017690&viewfull=1#post1017690) смотрели?
- - - Добавлено - - -
Насчет ULA - да, она читает по 4 байта подряд
Это кто-нибудь на самом деле проверял или все ссылаются на ту статью?
Lethargeek
24.06.2019, 01:28
Данные, конечно, деградировали, но не так, чтобы совсем.
если для выполняемого кода - таки совсем, а тут всего лишь яркость опознаётся
а какие были физические значения для чёрного и белого цвета в видеопамяти?
Это кто-нибудь на самом деле проверял или все ссылаются на ту статью?
эту (http://zxpress.ru/article.php?id=18217) штоле? а как иначе получить такой же "паттерн вейтов"
кстати, на +2A и выше паттерн другой (https://faqwiki.zxnet.co.uk/wiki/Contended_memory), так что там юла иначе должна читать??
Spectramine
24.06.2019, 07:00
Это кто-нибудь на самом деле проверял или все ссылаются на ту статью?
Проверяли, на одном из форумов, отпочковавшихся от этого, я видел и железные выкладки по этому поводу, а сам я сталкивался при реализации порта FF в эмуляторе - с него как раз читается то, что ULA прочитала в данном такте из ОЗУ, вот тут паттерн чтения ОЗУ ULA-ой по тактам: http://ramsoft.bbk.org.omegahg.com/floatingbus.html.
- - - Добавлено - - -
кстати, на +2A и выше паттерн другой, так что там юла иначе должна читать??
Ну да, немного иначе, там же ULA модифицированная амстрадовская, но всё также по 4 байта подряд. На ней порт FF работает по-другому, но тоже работает (только он уже не порт FF, конкретно с порта FF данные, считанные ULA-й, не считаешь, там адреса таких портов другие, плюс данные читаются с него тоже немного другие и по-другому.
Lethargeek
24.06.2019, 08:01
но всё также по 4 байта подряд
но откуда же тогда лишний вейт?
Spectramine
24.06.2019, 08:15
но откуда же тогда лишний вейт?
Понятия не имею. Чет перемудрили. Там ещё и в начале растра строки короткая задержка идет перед длинными.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot