CXEMATEKA.RU, © 2016 | Войти/Зарегистрироваться | In English
ПЭВМ «Нафаня» - ремонт, доработка до совместимости с ZX Spectrum 128K. Изготовление платы - ЛУТ
ПЭВМ «Нафаня» (http://speccy.info/Нафаня), пожалуй, один из самых оригинальных отечественных клонов Спектрума. Мне достался этот компьютер в нерабочем состоянии. А поскольку «Нафаня» построен на микросхеме БМК (базовый матричный кристалл), то ремонт и доработка этого компьютера – приключение особое.
Ремонт
На борту этого компьютера 48к памяти. Соответствующий тест ОЗУ показал картину характерную для сбоев по линии адресных мультиплексоров памяти. Учитывая, что все осциллограммы процессора оказались в норме, проверять нужно непосредственно сигналы A0-A7 на микросхемах памяти (565РУ5).
По характеру заполнения экрана тестом памяти (экран заполнялся фрагментарно), логично было предположить, что как минимум по одной из адресных линий ОЗУ идет искаженный сигнал. А чтобы не резать дорожки на плате, я извлек из панелек все 8-мь микросхем ОЗУ и подпаял внешний блок памяти от другого клона Спектрума – компьютера «Dynael». Этот блок состоит из двух микросхем DRAM D41464 и буфера на 1533АП5. Таким образом, всего три микросхемы заменяют 8-мь РУ5. Но есть тут и свои подводные камни, связанные с регенерацией памяти, но об этом чуть позже.
Далее я извлек ПЗУ из панельки и затем по очереди отсоединял на короткое время каждый адресный вход ОЗУ. Изображение на экране существенно не менялось, пока я не отпаял сигнал A3 операционной памяти (12 вывод РУ5). С отсоединенным сигналом А3, компьютер выдал-таки на экран так называемый «матрас» (изображение, формируемое Спектрум-совместимыми компьютерами при отсутствии ПЗУ).
Очевидно, что проблема именно с этой адресной линией памяти. Теперь возникает вопрос, а как исправить эту проблему, ведь неисправный адресный мультиплексор находится внутри микросхемы БМК? Есть один способ, который применялся в схеме расширения памяти для другой БМК (КА1515ХМ1-216, Т34ВГ1), эта схема была опубликована в своё время в журнале «ZX-Ревю» (№2 - 1995). Мы попробуем просто демультиплексировать адресную линию A3 оперативной памяти, по принципу, использованному в этой схеме.
Надо сказать, что на адресную шину ОЗУ подается довольно сложный сигнал, который формируется примерно следующим образом. По сигналу RAS идёт выборка старшего (AH) или младшего (AL) разряда адресной шины. А по сигналу, который на рисунке условно обозначен как WAIT, осуществляется переключение адресной шины ОЗУ между процессором (AH+AL) и видеоконтроллером (БМК в нашем случае). Когда адресная шина памяти находится в распоряжении процессора, происходят все операции с памятью - такие как чтение/запись в ячейки памяти, а также чтение процессором команд из оперативной памяти. Когда же адресная шина переходит в распоряжение видеоконтроллера, происходит чтение атрибутов и пикселей из экранной области ОЗУ, а также, что немаловажно, осуществляется регенерация ячеек оперативной памяти компьютера.
Чтобы воспользоваться этой схемой, нам надо узнать какая пара адресов процессора Z80 замешивается микросхемой БМК на вход A3 ОЗУ. Для этого я сначала извлек процессор из панельки и затем, последовательно подавая на каждый разряд адресной шины Z80 посторонний сигнал, отследил осциллографом, куда какой адрес приходит. Получилась такая таблица:
Адреса тут замешаны очень оригинальным образом, не так как на других клонах Спектрума. В частности на вход A7 ОЗУ приходит пара A15/A14, а это значит, что по этому входу не осуществляется регенерация оперативной памяти. При расширении оперативки, этот факт необходимо будет учесть...
Теперь попробуем пропустить проблемный сигнал через такую схему:
Для проверки установим специальное тестовое ПЗУ с экранным тестом. Получилась такая картина:
Это не то, что должно быть. Внимательно посмотрев на схему «Нафани», я обнаружил, что сигнал WAIT на этой схеме просто отсутствует, а соответствующий вход Z80 подтянут к плюсу.
А это значит, что нам надо использовать другую логику переключения адресов памяти между видеоконтроллером и процессором. За основу возьмем соответствующий фрагмент из схемы компьютера «Пентагон», т.к. он тоже построен по схеме без сигнала WAIT. Вот интересующей нас фрагмент схемы:
Эта схема делает как раз то, что нам нужно. Когда процессор запрашивает память (MREQ), а именно верхнюю часть памяти – т.е. ОЗУ, и при этом сигнал регенерации еще не активен (RFSH), в работу включается триггер, который формирует в нужный момент импульс частотой равной частоте сигнала CAS деленной пополам: 3.5/2= 1,75 МГц. За время активности этого импульса процессор должен успеть выполнить все операции с памятью, после чего адресная линия памяти окажется в распоряжении видеоконтроллера. На некоторых схемах «Пентагона», этот сигнал условно обозначен аббревиатурой TV. Соберем эту схему навесным монтажом, для проверки:
В результате экранный тест показал такую картинку:
И тест 48k памяти прошел успешно. Но вот при запуске программ с ленты возникли проблемы. Эффект получился любопытный. Когда наш компьютер выполняет код из ПЗУ, всё работает нормально. Когда же компьютер выполняет программу, загруженную в оперативную память, мы видим конфликт видеоконтроллера и процессора в виде помех на экране. Тесты также показали, что компьютер работает довольно нестабильно, это плюс к помехам на экране...
В процессе проверки осциллограмм, я обратил внимание на заметную разницу в амплитуде нашего исправленного адресного сигнала по отношению к адресным сигналам, формируемым микросхемой БМК. Так вот выяснилось, что БМК «Нафани» выдает сигналы не TTL уровня, а КМОП уровня. На большинстве клонов Спектрума, с которыми мне приходилось иметь дело, вся логика была TTL. Тут не так...
Поскольку процессор у нас TTL, а БМК – КМОП, я перепаял схему обвязки таким образом, чтобы все сигналы с процессора смешивались TTL логикой, а сигналы с БМК соответственно КМОП логикой. После чего система стала работать стабильнее, но помехи на экране, увы, остались.
Чтобы удобнее было экспериментировать, я написал небольшую программку на ассемблере, для того чтобы компьютер сразу после включения по циклу выполнял небольшой код в экранной области.
ORG 00000h DI ; Белый бордюр LD A,007h OUT (0feh),A ; Отчистка экранной области LD HL,04000h LD DE,04001h LD BC,017ffh LD (HL),000h LDIR ; Отчистка области атрибутов LD HL,05800h LD DE,05801h LD BC,002ffh LD (HL),038h LDIR LD A,0f3h LD (04000h),A LD A,0edh LD (04001h),A LD A,05fh LD (04002h),A LD A,032h LD (04003h),A XOR A LD (04004h),A LD A,040h LD (04005h),A LD A,018h LD (04006h),A LD A,0f9h LD (04007h),A JP 04000h
Программа была прошита в отдельное ПЗУ. Результатом работы этой программы является цикличное выполнение компьютером этого небольшого кода:
4000h DI 4001h LD A,R 4003h LD (04000h),A 4006h JR 04001h
В ячейку по адресу #4000h (первый байт экранной области) по циклу записывается содержимое регистра R процессора Z80. Поскольку содержимое регистра R постоянно меняется (его используют в генераторах случайных чисел), то мы сразу после включения видим перебор битов в левой верхней ячейке экрана и, в нашем случае, помехи, с которыми далее будем бороться.
А чтобы все-таки понять, в чем тут дело, осциллографа уже недостаточно. Воспользуемся специальным устройством – логическим анализатором. Прослушаем, что же там происходит во время работы нашего мини-теста:
Ну вот, теперь всё начинает проясняться. Первое на что тут стоит обратить внимание, это то, что частота процессора (1) практически полностью совпадает с сигналом CAS (2), как и на «Пентагоне». Но есть одно но, в какой-то момент работа процессора замедляется вдвое (3). Очевидно, это сделано как раз, чтобы избежать конфликта видеоконтроллера и процессора. В нашем же случае всё происходит наоборот. Когда процессор обращается к оперативной памяти (4), как и положено, формируется импульс частотой в 1,7 МГц (5). Но из-за импульса торможения процессора (3), сигнал запроса памяти продляется (4), и еще до его спада формируется дополнительный лишний импульс отключения видеоконтроллера (6). Именно в этот момент на экране и появляются помехи. Когда же импульса торможения процессора нет, лишний сигнал у нас тут не формируется (7) и, соответственно, помехи тоже на экране отсутствуют.
Теперь нам остается только немного доработать нашу схему обвязки. Добавим сигнал, гасящий лишний импульс отключения видеоконтроллера:
После этой доработки, конфликта процессора и видеоконтроллера не наблюдается:
Расширение памяти и подключение музыкального сопроцессора AY-3-8910(YM2149F)
Поскольку нам теперь известно каким образом демультиплексировать адресную шину ОЗУ «Нафани», ничто нам не помешает разработать схему расширения памяти этого компьютера.
Принципиальная схема (PDF A4):
Монтажная схема (PDF A4):
Верхний и нижний слои платы (два листа PDF A4). Важно: при печати под ЛУТ, фоторезист необходимо выставлять реальный размер! (Просто ставится галочка «Actual size» или «Реальный размер» в настройках печати Adobe Acrobat). Точный размер платы: 99.11 мм на 102.86 мм. Подойдет стандартный текстолит 10x10 см, но тут важно будет точно совместить рисунки и текстолит с учетом небольшой разницы в размерах.
Изготовление платы по лазерно-утюжной технологии (ЛУТ)
Для начала распечатаем на глянцевой бумаге верхний и нижний слои нашей будущей платы. Глянцевая бумага («LOMOND») у нас для струйного принтера, но распечатывать дорожки мы будем на лазерном принтере. Это нужно для того, чтобы перенести тонер впоследствии на текстолит без существенных потерь. При печати из программы «Adobe Acrobat», установим галочку «Actual size» или «Реальный размер» в настройках печати, иначе программа исказит размеры контактных площадок и дорожек.
Точный размер платы в нашем случае 99.11 мм на 102.86 мм. Однако тут подойдёт и стандартный двухсторонний текстолит размером 10x10 см. Обе стороны текстолита нужно будет зачистить мелкой шкуркой, промыть водой и обезжирить спиртом. Лучше производить все эти манипуляции в защитных перчатках.
Пожалуй, один из самых ответственных моментов это совмещение верхней и нижней распечатки. Листки удобно совмещать на оконном стекле в светлое время суток. Совмещаются рисунки стороной печати внутрь, делать это нужно аккуратно, и не спеша, так чтобы все контактные площадки верхнего и нижнего слоев в точности совпали. Затем листки аккуратно закрепляются скотчем (я использую двухсторонний скотч).
У нас получится своего рода конверт, внутрь которого мы поместим наш текстолит, так чтобы он в точности совпал с нашими распечатками. В нашем случае текстолит несколько меньше исходного размера платы, поэтому нужно его расположить так, чтобы все дорожки целиком вместились на нашу будущую плату.
Далее при помощи обычного утюга перенесем рисунок на текстолит, энергичными движениями разглаживая сначала одну сторону конверта, а потом другую сторону.
После того, как текстолит остынет, отрежем лишнюю бумагу. А чтобы бумага легко отделилась от текстолита, воспользуемся народной мудростью. Нальём в ёмкость примерно 250 миллилитров горячей воды из-под крана и растворим в этой воде ложку средства для чистки труб «Крот». Жидкость получится едкая, поэтому все действия необходимо производить в защитных перчатках. Теперь поместим наш конверт в эту жидкость минут на 15. Бумага за это время, конечно, не растворится, но зато станет очень хрупкой.
Затем, не снимая перчатки, аккуратно смоем бумагу под струей воды. Бумага после купания в щелочном растворе легко скатывается практически до основания. Никаких особых усилий тут прилагать не надо.
После промывки платы, удалим зубочисткой или иголкой остатки бумаги в промежутках между дорожками. Эти остатки легко разрушаются, но делать это надо аккуратно, чтобы случайно не сколоть тонер. Я тут использовал грушу для чистки оптики, чтобы сдувать мелкие крошки - остатки бумаги, и использовал линзу, чтобы ничего не упустить из виду. Когда остатков бумаги не останется, подкрасим перманентным маркером все заметные сколы и трещины на тонере. Я их прокрашиваю как минимум в два слоя для надежности.
Теперь можно приступить к травлению текстолита. Поскольку плата у нас небольшая - квадрат 10x10 сантиметров, то нам хватит раствора 50-ти грамм персульфата аммония на 250 миллилитров горячей воды из-под крана. Сначала дадим немного полежать плате в растворе, а затем искупаем её в нём хорошенько. Тут я использовал для этой процедуры две деревянных зубочистки. Чем меньше времени плата проведет в растворе, тем лучше, т.к. если плату передержать, то мы можем просто перетравить дорожки во многих местах, а этого нам не надо. В данном случае на травление ушло чуть больше 10-ти минут.
Осталось только смыть остатки тонера ацетоном и можно будет перейти к сверлению.
Плата у нас получилась довольно высокого качества (это первый тестовый вариант платы, выше приведен вариант с доработками и исправлениями):
Готовая плата, после сверления отверстий под детали и сборки:
На плате «Нафани» есть место под разъем расширения. Самое время установить этот разъем, сюда и будем подключать нашу плату доработок.
Теперь нам нужно будет установить на плату память большей емкости. Просто заменим микросхемы памяти РУ5, на РУ7. Чтобы это стало возможным, пришлось пойти на хитрость. Дело в том, что в этом компьютере регенерация оперативной памяти осуществляется только по адресам A0-A6, как мы выяснили. Этого достаточно для микросхем РУ5, но недостаточно для микросхем РУ7. Для нормальной работы РУ7 необходимо производить регенерацию по адресам A0-A7.
Эта проблема решена у нас следующим образом. Пару адресов A14 и A15, по которой регенерация памяти не осуществляется, мы перенесли на адресный разряд A8 микросхем РУ7. А на разряд A7 мы подаем новый сигнал, где в качестве младшего адреса у нас будет повторно использован разряд A3 в связке с сигналом AM3 с микросхемы БМК, а в качестве старшего разряда сигнал A16 с платы расширения. В этом случае, регенерация по разряду A7 будет осуществляться видеоконтроллером. Кстати, вместо разряда A3 мы можем использовать для регенерации любой из младших разрядов, например разряд A0 в связке с AM0, это не принципиально.
Линейка из 8-ми микросхем РУ7 образует в сумме 256 Кб оперативной памяти. Поскольку мы использовали один из младших разрядов РУ7 для регенерации, мы теперь можем использовать только 128 Кб из 256 Кб, а больше нам тут и не надо.
Что же касается упомянутого нами ранее блока памяти на микросхемах DRAM D41464, то в «Нафане» он нормально работать без значительных доработок не будет. Просто микросхемы D41464 должны регенерироваться также как и микросхемы РУ7 по адресам с A0 по A7, но у них при этом нет запаса в общем объеме памяти, так что мы не можем тут применить такой же трюк с копированием одного из младших адресов для обеспечения нормальной регенерации. Так как мы имеем дело с закрытой архитектурой, где вся основная логика содержится в микросхеме БМК, эту проблему довольно сложно решить лишь внешней обвязкой. Как подобные проблемы решаются на клонах с открытой архитектурой, можно почитать тут: https://zxpress.ru/article.php?id=14681.
Окончательная сборка и тестирование
Тест расширенной памяти прошел успешно. Но вот почему-то некоторые программы отказались запускаться по непонятным причинам. Ради интереса я решил сравнить сигнал AM7 с БМК и сигнал AM7' с нашей платы расширения. По идее они должны быть идентичными в режиме Спектрума 48k. И вот, что мы тут видим, сигнал AM7 с БМК (1) формируется с задержкой относительно нашего сигнала (2) и относительно сигнала RAS (3), что удивительно:
Немного поэкспериментировав, я выяснил, что, по всей видимости, что-то у нас тут не так с тактовым генератором.
Тактовый генератор тут собран на микросхеме 155ЛН1. На неё я сразу обратил внимание, она у нас с почетными значками:
Ромб, например, расшифровывается, как военная приемка, т.е. это значит, что микросхема у нас наивысшего качества. Равносторонний треугольник с вершиной направленной вверх - знак чувствительности микросхемы к статическому электричеству. И еще тут у нас логотип завода изготовителя - предприятие «Азон», Азербайджан, Баку. В общем, в качестве этой микросхемы сомневаться не приходится. Но вот что любопытно, на принципиальной схеме «Нафани», на выходе тактового генератора указан резистор, который должен подтягивать тактовый сигнал к плюсу, и стоят метки - «подбирают при регулировании» и «устанавливать при необходимости»:
По всей очевидности, БМК ожидает на входе сигнал КМОП уровня, а не ТТЛ. Поэтому я решил заменить эту микросхему на КМОП аналог - 1564ЛН1 (74HC04N).
В результате мы получили весьма компактный и оригинальный аналог компьютера «ZX Spectrum 128k»: ПЭВМ «Нафаня» 128к + AY-3-8910(YM2149F):
Полезные файлы:
Имя файла: dizzy7r_ffc.zip (84K)
MD5: 551787fed614b7399142702176b91476
Игра «DIZZY 7» (русифицированная мной в 1995 году).
В архиве игра в двух форматах: TAP, SCL.
Имя файла: 27256.bin (32K)
MD5: 178d780c1347cf6634471805bd10e52c
Контрольная сумма прошивки: F5F4
Комбинированная прошивка для ПЗУ 27256:
#0000-#3FFF: SOS 128k (Стандартная ОС для «ZX Spectrum» 128k).
MD5: a249565f03b98d004ee7f019570069cd
Контрольная сумма: C96E
#4000-#7FFF: SOS 48k (Стандартная ОС для «ZX Spectrum» 48k).
MD5: 6e09e5d3c4aef166601669feaaadc01c
Контрольная сумма: 2C86
Скачать: http://www.cxemateka.ru/v2/27256.bin
Имя файла: test48k_org.bin (2K)
MD5: c67f0c2c69dec16b89e3bf62026e2831
Контрольная сумма прошивки: A4E7
Оригинальная тестовая прошивка 48к с процедурой заполнения экранной области.
Тест полезен при обнаружении неисправностей в особо запущенных случаях.
Имя файла: screen64.bin (8K)
MD5: dad0c67dbfe48970ba07772ff1cc045c
Контрольная сумма прошивки: F3FF
Простой тест видеоконтроллера. Цвет бордюра по умолчанию - белый.
Если удерживать при нажатии кнопки RESET одну из клавиш от 0 до 7,
цвет бордюра установится соответствующим образом:
0 - чёрный
1 - синий
2 - красный
3 - пурпурный
4 - зелёный
5 - голубой
6 - жёлтый
7 - белый
В этом режиме, и в процессе работы теста можно изменять цвет бордюра кнопками 0-7.
Схема проверенная, в своё время активно ей пользовался )
Просмотров страницы: 24,007
Программирование, оформление: Константин Айги |
©2016 CXEMATEKA.RU |