Spectrum-совместимые компьютеры «Байт»,«Байт-01» и прочие раритеты

15 / 6 818

Тесты памяти для ZX-Spectrum, прошиваемые в ПЗУ

Неисправности, связанные с ОЗУ, занимают "почётную" нишу среди всевозможных причин неработоспособности Спектрумов. Микросхемы памяти относительно ненадёжны и склонны выгорать (в особенности при проблемах с питанием). И особенно если источник питания Спектрума трансформаторный. Уже сколько раз было замечено на моём компьютере Ленинград-1 с трансформаторным блоком питания - случайно перемкнёшь питание компьютера (+5В и массу), и одна-две микросхемы КР565РУ5 уже "вылетели".

Как правило горит микросхема памяти полностью. Т.е. не так, что в ней какой-то один бит не работает, а вообще вся микросхема перестаёт работать. Память Спектрума организована так, что каждая микросхема ОЗУ отвечает за свой бит памяти (для 48К спектрума это 8 микросхем по одному биту, итого имеем 64КБ адресуемой памяти). При старте компьютера ПЗУ производит свой тест памяти, и, если какая-либо ячейка ОЗУ "сбоит", компьютер устанавливает границу доступной памяти на адрес ячейки, предыдущей перед неисправной. При этом значение границы доступной памяти устанавливается в системной переменной P_RAMT (она находится по адресам 23732-23733 в ОЗУ. В исправном компьютере значение этой системной переменной будет равно #FFFF (т.е. в обеих ячейках памяти будут записаны числа 255). Если в системной переменной находится число, не равное #FFFF, к примеру если там #F000, то это означает, что ячейка памяти #F001 уже дефектная.

Всё это очень хорошо, но только в том случае, если обнаруженная дефектная ячейка памяти находится не в начале доступного ОЗУ. Дело в том, что для работы BASIC-48 тоже требуется какая-то доступная исправная память. И если дефект памяти выявится в начале ОЗУ, то BASIC просто-напросто не запустится, и мы ничего не сможем узнать. В случае, когда сгорела одна из микросхем ОЗУ полностью, компьютер не запустит BASIC.

Далее остаются только "пляски с бубном", чтобы найти что же в действительности сгорело. Применимо к микросхемам памяти можно попробовать примитивную, но иногда полезную диагностику. Дело в том, что дефектная микросхема памяти (КР565РУ5) может отличаться по температуре от остальных рабочих микросхем. При работе ОЗУ КР565РУ5 греется. Если приложить к микросхемам ОЗУ палец, можно почувствовать, что микросхемы ощутимо тёплые. Неисправная микросхема может греться как утюг, а может быть вообще холодной. Это необязательно будет так, но данный метод можно запомнить и применять от случая к случаю.

Вообще при производстве Спектрумов правилами хорошего тона является установка на панельки микросхемы ПЗУ и процессора. Это очень сильно облегчает жизнь при ремонте компьютера. В данном случае нас интересует микросхема ПЗУ. В "древних" Спектрумах, производимых в конце 80-х (начале 90-х годов) как правило ставилось две микросхемы ПЗУ. Это продиктовано тем, что микросхему ПЗУ объёмом 16К (буржуинское наименование 27128) достать в то время было не так-то просто, поэтому было проще и дешевле заменить её на две микросхемы объёмом по 8К, благо у них был отечественный аналог КР573РФ4, КР573РФ6. И обычно одну из микросхем (как правило это ПЗУ-0) ставили на панельку. Почему ПЗУ-0? Т.к. ПЗУ собрано на двух микросхемах, его адресное пространство разбито на две части. Всего объём ПЗУ составляет 16К. Поэтому первые 8К считаются как ПЗУ-0, а вторые 8К - ПЗУ-1. При старте компьютера процессор начинает выполнять программу, расположенную с адреса #0000, а это как раз область, адресуемая ПЗУ-0.

Таки да, нам очень надо, чтобы хотя бы одно ПЗУ было на панельке. Если на плате компьютера вообще одно ПЗУ на панельке, это тоже очень хорошо. Всё дело в том, что ПЗУ можно снять и вместо него поставить своё ПЗУ, в котором "прошит" тест памяти. Тогда при включении компьютера будет запущен нужный нам тест памяти, который явно покажет, что у нас творится с памятью в компьютере.

Очень-очень давно, когда у меня ещё не было программатора ПЗУ, приходилось ехать на радиорынок и там суровые дядьки за соответствующую мзду прошивали в ПЗУ что угодно. Были у них и тесты памяти для Спектрумов. Да, хорошее было тогда время...

Так вот, прикупив заветную прошитую микросхему ПЗУ можно было потестить свой компьютер. Однако сперва нужно было решить вопрос - как правильно вставить ПЗУ в панельку? Дело в том, что тест ПЗУ прошивается в микросхему объёмом 2К. Она имеет 24 вывода. В Спектруме используются 28-выводные ПЗУ. В этом случае у микросхемы с тестом поднимались выводы 21 и 24 и объединялись следующим образом:

Микросхема КР573РФ5 с тестом ОЗУ

Вставляется такая микросхема в панельку так, как показано на фотографии:

Тестовое ПЗУ, установленное в панельку

Думаю, на фотографии всё ясно видно. Контакт 12 ПЗУ (GND) должен совпасть с контактом 14 в панельке. А оттопыренный вывод тестового ПЗУ должен попасть в 28-й контакт панельки (питание +5В).

Можно не уродовать ПЗУ, а сделать переходную плату. Сверху ставим панельку на 24 контакта для тестового ПЗУ, снизу торчат штыри для установки платы в 28-выводную панельку в компьютер. Все требуемые изменения в присоединении 21 и 24 выводов ПЗУ можно сделать прямо на такой плате:

Переходная плата для тестового ПЗУ

Дальше всё просто - включаем компьютер, и запускается тест, прошитый в микросхему ПЗУ.

В своей практике я часто пользуюсь следующими тестовыми прошивками:

Тестовое ПЗУ для ZX-Spectrum 48K

Как следует из названия, проверяет 48К ОЗУ. Работает очень медленно (порядка 12 минут). Сначала чистятся атрибуты экрана, потом поочерёдно экран закрашивается и очищается, затем показываются результаты теста ОЗУ. После этого идёт тест ПЗУ, но он всегда завершается с ошибкой, но для нас это не играет никакой роли. Главное - проверить ОЗУ.

ВНИМАНИЕ!
У этого теста есть одна "фишка" - если держать при старте теста пробел, то графическая часть с закрашиванием атрибутов пропускается и начинается непосредственно тест ОЗУ. Проверка на нажатый пробел делается в момент, когда заканчивается перебор цветов бордюра в начале теста.

Как проходит тест на исправном компьютере можно посмотреть на следующем видео:

Прохождение теста 48К на исправном компьютере

Прохождение теста, если неисправна одна из микросхем ОЗУ, можно увидеть в первом выпуске Байт Tales #01:

БАЙТ Tales #01 - Ремонтируем компьютер «Байт»

Ещё одно тестовое ПЗУ для ZX-Spectrum 48K

Меня не совсем устраивает тест памяти 48К из предыдущего раздела страницы, поэтому когда у меня появилось свободное время и желание я дизассемблировал этот тест и на его основе "запилил" свою версию, в которой постарался реализовать свои "хотелки".

В итоге получился немного более усовершенствованный тест памяти, в котором я добавил несколько алгоритмов тестирования памяти, выкинул из теста лишний код (там его хватает), а также сделал "глушилку" синтезатора на КР580ВИ53 в случае использования теста на компьютере "Байт".

Скачать прошивку теста вместе со всеми исходниками для iS-DOS (тест написан на iS-Assembler) можно в конце этой страницы.

Тест ПЗУ для ZX-Spectrum 48K (из журнала "Радиолюбитель" 1995 №9)

В журнале "Радиолюбитель" №9 за 1995 год опубликован дамп теста ПЗУ для ZX-Spectrum 48 за авторством Г. Улановского.

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

После окончания теста на бордюр выводятся 8 белых полос, символизирующих 8 бит ОЗУ. Первая сверху полоса показывает исправность бита D0, вторая - D1, третья - D2 и т.д. В случае исправного соответствующего бита ОЗУ полоса будет узкая:

Все биты ОЗУ исправны
Все биты ОЗУ исправны

В случае неисправного бита полоса будет в два раза шире:

Все биты ОЗУ неисправны
Все биты ОЗУ неисправны

Недостатком теста является проверка только первых 16К ОЗУ (по адресам #4000-#7FFF). Однако это легко исправляется изменением исходника теста.

Тест происходит в 4 этапа (заполнение и проверка на байты #00, #FF, #55 и #AA). При желании можно добавить в исходный текст и другие варианты проверки ОЗУ.

В качестве примера я доработал тест для проверки всего объёма ОЗУ 48К, а также вставил в исходник процедуру глушения КР580ВИ53 для компьютера "Байт". Прошивки двух вариантов теста и исходники можно скачать в конце этой статьи.

Тестовое ПЗУ для ZX-Spectrum 128К

Если верить заставке, автор сего ПЗУ - Андрей Хахонов (Ratcopy), Петербург.

Этот тест позволяет быстро проверить память в 128-м ZX-Spectrum.

Как проходит тест на исправном компьютере можно посмотреть на следующем видео:

Прохождение теста 128К на исправном компьютере

Описание работы теста:

Порой результаты теста вызывают вопросы - что такое буфер и порт конфигурации? Что значит ошибка буфера? Сейчас я обо всём расскажу :)

Если при старте теста держать нажатой клавишу "пробел", сначала запустится тест экрана:

Тест-128 проверка буфера

Затем тест продолжится.

- Тест буфера.

Проверяется одна ячейка памяти по адресу #4000. В неё записываются значения от #00 до #FF с последующей проверкой. Если всё в порядке, выводится сообщение об успешной проверке:

Тест-128 успешная проверка буфера

В случае несовпадения записанного и считанного значения появляется сообщение об ошибке:

Тест-128 ошибка проверки буфера

В данном случае ошибка показывает, что по адресу #4000 записано значение #FF, а при проверке прочитано #EF.

- Тест - порт конфигурации.

В каждый из 8 банков памяти по адресу #C000 записываем значения с номером банка памяти (В банк 0 - значение 0, в банк 1 - значение 1 и так далее). После проверяем: снова перебираем банки памяти от 0 до 7 и сравниваем, чтобы прочитанное из #C000 значение совпадало с номером банка памяти. Такие циклы запись/проверка повторяются 256 раз.

Кроме этого для банка памяти 2 записанное в #C000 значение должно одновременно читаться и из адреса #8000 - это тоже проверяется!

Если всё в порядке, выводим сообщение об успешной проверке порта конфигурации:

Тест-128 успешная проверка порта конфигурации

В случае несовпадения одного из считанных значений выводится сообщение об ошибке порта конфигурации:

Тест-128 ошибка порта конфигурации

БАНК - номер банка ОЗУ, где произошла ошибка.

СЕКТОР - номер области памяти (CPU0-CPU3), где произошла ошибка:

Распределение областей памяти CPU0-CPU3

ЗАПИСАНО и СЧИТАНО - значения, соответственно, записанные в #C000 и потом считанные из #C000.

Конкретно это сообщение об ошибке (как на скриншоте выше) появляется если запустить тест 128К на 48-килобайтных ZX-Spectrum. Почему так получается: так как банки ОЗУ не переключаются (компьютер-то 48-килобайтный), тест в цикле пишет в #C000 значения от 0 до 7. И потом при проверке для банка 0 мы получаем прочитанное из #C000 значение, записанное для последнего в цикле банка памяти (банк №7). Что и видно на скриншоте :)

На этом этапе теста ошибки порта конфигурации обычно говорят о том, что в компьютере что-то не так с переключением банков ОЗУ. Также, если микросхемы ОЗУ (или даже одна микросхема) неисправны, даже при корректной работе схемы расширения будет ошибка, т.к. из #C000 может читаться "мусор".

- Тест - ОЗУ.

На данном этапе идёт проверка всех ячеек памяти разными алгоритмами. Для наглядности номер банка памяти показывается цветом бордюра (0-й банк - черный бордюр, 1-й банк - синий бордюр, и так далее). Если всё в порядке, получаем сообщение об успешном завершении теста:

Тест-128 успешное завершение теста

В случае ошибки выводится сообщение вида:

Тест-128 ошибка ОЗУ

БАНК - номер банка ОЗУ, где произошла ошибка.

СЕКТОР - номер области памяти (CPU0-CPU3), где произошла ошибка.

АДРЕС - адрес ячейки памяти, где произошла ошибка.

ЗАПИСАНО и СЧИТАНО - значения, соответственно, записанные в ячейку памяти и потом считанные из неё.

По окончании теста ОЗУ он запускается снова, но в непрерывном режиме. Все банки ОЗУ проверяются без остановки. Если всё в порядке, на экран не выводится никаких сообщений. Удобно для длительной проверки ОЗУ - к примеру как оно себя поведёт при прогреве компьютера. Можно спокойно оставить тест на длительное время.

В случае возникновения ошибки будет выведено сообщение вида:

Тест-128 ошибка ОЗУ

Некоторые нюансы работы теста 128К на компьютерах с контроллерами дисковода

При работе на некоторых компьютерах с подключенным контроллером дисковода возможны глюки при прохождении теста. Дело в том, что при подключении контроллера дисковода делается доработка, которая запрещает выбор каких-либо портов при работе контроллера. К примеру, как рекомендуется делать при подключении контроллера C-48 к ZX-Spectrum:

Доработки ZX-Spectrum при подключении контроллера дисковода С-48

Разрывается проводник, идущий от выхода /IORQ процессора к схеме компьютера, и в разрыв включается логический элмент, коммутирующий сигнал /IORQ.

Это делается для того, чтобы отключить возможные конфликтующие с портами контроллера дисковода порты компьютера. В первую очередь это порт Kempston джойстика. Однако никто не станет для конкрентой модели компьютера искать что там может конфликтовать с контроллером дисковода, поэтому проще на момент работы контроллера дисковода отключить обращение к портам вообще.

Второй момент: опять же в некоторых компьютерах, доработанных таким образом, при сбросе сразу же запускается TR-DOS. Это сделано для того, чтобы каждый раз из-под BASIC не "набивать" команду RANDOMIZE USR 15616 для старта TR-DOS.

Третий момент: опять же в некоторых компьютерах ПЗУ с BASIC совмещено с ПЗУ TR-DOS в одной микросхеме. К примеру как в этом компьютере Ленинград-1:

Видно, что стоит одно ПЗУ 27512, в котором находится всё - и BASIC48, и TR-DOS и т.п. И вот при таком раскладе, если мы вставим тестовое ПЗУ и включим компьютер, мы по сбросу получим активный контроллер дисковода. При этом будет запрет обращения к портам, в том числе к портам бордюра (#FE) и расширения (#7FFD). При этом тест будет проходить без полос на бордюре и вообще завершится с ошибкой, как если бы он был запущен на 48К компьютере (порт расширения ведь недоступен!):

Прохождение теста 128К на компьютере с контроллером дисковода

В данном компьютере помогло физическое отключение контроллера дисковода (он подключен через разъём).

Я просто привёл тут этот пример как реальную ситуацию, с которой я столкнулся при прохождении теста 128К на таком компьютере.

Test 128K для компьютера "Байт"

"Обычный" тест 128К хоть и будет работать на компьютере "Байт", но всё время его работы вас будет сопровождать "гудение" из динамика, т.к. музыкальный синтезатор КР580ВИ53 некому заглушить. Чтобы можно было комфортно пользоваться тестом 128К я его немного переписал - ввёл в тест процедуру "глушения" для ВИ53.

Теперь достаточно при включении компьютера с установленной тестовой микросхемой ПЗУ держать нажатой любую клавишу из полуряда "CS,Z,X,C,V" для "заглушения" ВИ53. Можно один раз "заглушить" звук - при последующих запусках теста через RESET больше не нужно ничего нажимать при старте.

В этом тесте дополнительно к названию теста выводится строка "БАЙТ":

Тест-128 для компьютера Байт

Во всём остальном это самый обычный тест ОЗУ 128К, и может без каких-либо ограничений использоваться на других 128К Спектрумах.

Test 48/128K для компьютера "Байт"

Это просто компиляция двух тестов - 48К и 128К в одном ПЗУ объёмом 8К (2764). При старте происходит "глушение" синтезатора ВИ53 (актуально для компьютера "Байт"). Далее опрашивается клавиатура. Если при старте ПЗУ будет нажата любая клавиша из полуряда 1-5, запустится тест 128К, иначе будет работать тест 48К.

Тест хоть изначально делался для "Байтов", но будет работать и на обычных Спектрумах.

Скачать прошивки тестовых ПЗУ

Скачать:
Прошивка теста памяти 48К для ZX-SpectrumПрошивается в 2К ПЗУ (2716, КР573РФ2, КР573РФ5)
Прошивка теста памяти 48К для ZX-Spectrum (моя версия теста памяти)
Версия от 8-Mar-2015Прошивается в 2К ПЗУ (2716, КР573РФ2, КР573РФ5).
В комплекте описание работы и исходники для iS-Assembler
Тест памяти 48К для ZX-Spectrum (из журнала "Радиолюбитель" 1995 №9)Прошивается в 2К ПЗУ (2716, КР573РФ2, КР573РФ5).
В архиве находятся два варианта теста с исходниками и скан статьи с описанием теста из журнала "Радиолюбитель"
Прошивка теста памяти 128К для ZX-Spectrum (автор Андрей Хахонов)Прошивается в 2К ПЗУ (2716, КР573РФ2, КР573РФ5)
Прошивка теста памяти 128К для компьютера "Байт" (автор Андрей Хахонов, переделка - Prusak)Прошивается в 2К ПЗУ (2716, КР573РФ2, КР573РФ5). В состав теста входит процедура глушения КР580ВИ53.
Прошивка теста памяти 48 и 128К для компьютера "Байт"Прошивается в 8К ПЗУ (2764, КР573РФ4, КР573РФ6). В состав теста входит процедура глушения КР580ВИ53.