PDA

Просмотр полной версии : Тест памяти для Z80



AlexBel
04.07.2022, 06:09
Всем привет. Нужен исходник теста памяти для Z80, позволяющий проверить не только отдельные ячейки, но и обрыв/замыкание адресных линий, т.е. когда происходит дублирование участка физической памяти в адресном пространстве процессора. Буду благодарен за проверенный, рабочий тест.
Девайс работает, но неустойчиво, есть подозрение на некорректную работу памяти. Для вывода результатов тестирования есть UART и порт с несколькими светодиодами, чего, думаю, вполне достаточно.


Вопрос более не актуален. Не знаю, как удалить тему.

KTSerg
05.07.2022, 16:06
Тест на замыкание адресных линий, на самом деле, довольно прост, сам по себе.
Если уверен в исправности ОЗУ, то достаточно по нескольким адресам записать разные метки, а потом прочитать их и сравнить с эталоном. Если метка не совпадает, то линия содержит посторонний шум.
Но подозреваю, что тест адресных линий аппаратно-зависим, т.е. при анализе очень важно понимать есть ли на шине мультиплексирование разрядов, и прочей аппаратной фигни.
Я в своём тесте писал метки по адресам: FFFE, FFFD, FFFB, FFF7, FFEF, FFDF, FFBF, FF7F, FEFF, FDFF, FBFF, F7FF, EFFF, DFFF, BFFF, 7FFF.
Причём важно записать метки сначала в таком порядке, проанализировать метки (выловить одну из замкнутых линий), а потом заполнить метками в обратном порядке начиная с 7FFF и заканчивая FFFE, тогда при повторном анализе, будет видно вторую из замкнутых линий, и в результате будем знать обе взаимно-замкнутые линии адреса, а не только одну.
Использовать метки по адресам типа 8000, 4000, 2000, ... и т.д. у меня не получилось. при анализе вылазят артевакты, искажающие результат теста. А вот когда все разряды в "1", а тестируемый в "0", то результат теста получается чистый, и достоверный.

Напомню, все записываемые метки обязательно должны быть разными.

reddie
05.07.2022, 16:51
Использовать метки по адресам типа 8000, 4000, 2000, ... и т.д. у меня не получилось.
Предположу, что сильный ТТЛ-ноль просто забивал дохлую ТТЛ-единицу =)
Поэтому первый вариант (с бегущим нулем) правильнее.

AlexBel
05.07.2022, 18:45
В результате дело оказалось не в памяти. Если точнее - в памяти, но в моей, а не компьютерной :) Я забыл, что Z80 при использовании прерывания /INT для считывания вектора недостаточно управлять буфером данных только по /RD, нужно ещё учитывать низкий уровень /M1 и /IORQ. А вот это у меня, как раз, и не было сделано и при приёме символа SIO и срабатывании прерывания, процессор вместо вектора хватал то, что было на шине данных с отключённым буфером, т.е. что попало :) А я грешил на память, так как уже не знал, в чём ещё может быть дело. К счастью, я вспомнил про "какую-то хитрость при прерывании" и полез в документацию. Посмотрел диаграммы, обругал себя нехорошим словом, добавил к управлению буфером пару мелких микросхем и облегчённо выдохнул :)
Но, в любом случае, большое спасибо за ответы, если и не мне, то кому-нибудь они помогут.

AlexG
05.07.2022, 22:12
ну уже не требуется. однако добавлю.
Сперва надо тестовой пзу протестировать саму себя. сами подумайте: если адреса "рядом" с процессором глючат - то никакой тест не запустится.