Программатор ПЗУ Winbond W27C512
Публикую обещанное - программатор ПЗУ с электрическим стиранием: Winbond W27C512.
Уши этого устройства растут из варианта более универсального программатора УФ-стираемых ПЗУ (27x256, 27x512, 27C040, 27C080) для Орион-128. Практический опыт показал, что ПЗУ Winbond W27C512 самые удобные, и надобность в возможности прошивки УФ-стираемых ПЗУ, в общем-то, отпала. Для работы с W27C512 требуется меньше вариантов напряжений и минимум коммутации, в результате схема была ощутимо упрощена.
А поскольку W27C512 поддерживает мгновенное электрическое стирание, то было и упрощено ПО, обслуживающее программатор: не требуется отдельно выполнять проверку на чистоту и стирание, они выполняются автоматически перед прошивкой.
Исключительно с целью развлечения проект выполнен на совершенно "нефеньшуйной" элементной базе - SMD.
Фото программатора в сборе:
https://forum-img.guitarplayer.ru/2024/02/11/60Y6s.png
альт.ссылка на изображение
https://forum-img.guitarplayer.ru/2024/02/11/60o8I.png
альт.ссылка на изображение
Конструкция рассчитана на применение углового разъёма, т.о. программатор вставляется под углом 90 градусов к плате ПРК "Орион-128":
https://forum-img.guitarplayer.ru/2024/02/11/60qcU.png
альт.ссылка на изображение
Форм-фактор устройства в виде "затычки на параллельный порт" выбран не случайно. Дело в том, что применение соединительного кабеля (шлейфа) вызывает большое количество проблем со стабильностью работы устройства, требуется довольно сложная помехозащищённая конструкция кабеля. В общем, повторяемость устройства в выносном варианте (с применением шлейфа) была бы сомнительная.
Устройство изначально разработано для ПРК "Орион-128" (под порт пользователя #F600), но его также возможно использовать фактически на любой 8-битке, имеющей свободный порт ВВ55. В частности у меня в данный момент устройство подключено к мультикарте ПРК "Орион-ПРО" (к порту #20, через переходник) и успешно используется в работе.
Принципиальная электрическая схема программатора - (ссылка)
*Отдельное спасибо Сергею (aka Stampmaker) за помощь в разработке и изготовлении печатной платы и красивый чертёж схемы!
Внешнее питание не требуется, основное питание (+5в) конструкция берёт непосредственно из разёма порта, а необходимые для режимов записи/стирания напряжения (+12в и +14в) получаются при помощи step-up преобразования. Благодаря использованию высокочастотного (1,6 МГц) преобразователя LM27313XMF, возможно применение очень компактных компонентов обвеса (дросселя и конденсаторов), а также абсолютно бесшумная работа (никаких писков, свистов).
Ссылки на ключевые компоненты Step-Up преобразователя:
Преобразователь LM27313XMF
Дроссель CM453232-100KL, 10 мкГн
Керамические LowESR чип-конденсаторы 10мкФ X7R 25В
Для привнесения в конструкцию "немного ламповости", коммутация адресной линии и напряжения +14в в режиме стирания выполнена на малогабаритном реле с двумя группами переключающих контактов. На самом деле была попытка сделать этот узел на транзисторных ключах, но там выходило то ли 6, то ли 8 шт ПТ + их обвязка... в общем, реле однозначно победило.
Кстати, щёлканье реле весьма сексуально, и тихими зимними вечерами очень доставляет :) А ещё больше доставляет его цена в ЧиД - https://www.chipdip.ru/product/1-1462037-8-im03ts )) Но это уже совсем другая история...
В качестве микросхемы регистра защёлки адреса можно применить отечественную ИМС ЭКФ1533ИР23.
Важно! Элементы: R3, R4, R5 и R7 определяют точность напряжений программирования (+12в) и стирания (+14в), желательно применение компонетов с допуском не хуже 1%.
Программная поддержка представлена утилитой WBPROG$ (для каждой из платформ своя версия, включены в соответствующие сборки DSDOS v3.87). В будущем также планируется реализация в виде плагина к оболочке SHELL. При наличии интереса, возможно будут написаны варианты ПО и для других 8-биток.
Запуск утилиты без параметров традиционно выводит справку:
https://forum-img.guitarplayer.ru/2024/02/11/60rh6.png
альт.ссылка на изображение
Конструкция программатора такова, что питание и управляющие сигналы на ПЗУ подаются только во время выполнения операции, после завершения которой на всех выводах устанавливается нулевой потенциал, т.о. возможна безопасная смена микросхемы. Перед выполнением операций, стирающих информацию в ПЗУ, сначала выводится предупреждающий транспарант, требующий подтверждения действия (кроме режима "W"!).
Полный образ для прошивки ПЗУ W27C512 занимает 64 Кб, в один файл он не помещается, а также не помещается в ОЗУ пользователя (48 Кб). Вопрос решён традиционно разбивкой образа на два файла (по 32 Кб каждый), которые по очереди загружаются в ОЗУ во время работы программатора. Формат файлов образа: <Имя>+<Расширение>. Имя - произвольные символы, допустимые в именах файлов ОС DSDOS, максимальное кол-во = 6. Расширение - два символа вида <#N>, где N - порядковый номер файла образа (0, 1). У обоих файлов образа <Имя> должно быть одинаковое, различие только в номере параметра <Расширение>! При указании имени файла образа в параметрах запуска утилиты, расширение указывать не нужно, его утилита формирует автоматически при поиске требуемого файла.
Режимы работы программатора задаются ключами. Режимы проверки чистоты ПЗУ и стирания не требуют указания имени файла образа - вводится только ключ. В остальных режимах указывается имя файла образа и ключ, порядок следования параметров произвольный.
В ходе выполнения операций на экран выводится индикатор прогресса. В операциях с файлами - в два прохода, соответственно.
Итак, собственно режимы работы программатора.
Проверка чистоты микросхемы [ключ /C]:
https://forum-img.guitarplayer.ru/2024/02/11/605Xg.png
альт.ссылка на изображение
ПЗУ считается чистым, если во всех ячейках записано FFh. В противном случае выводится кол-во нестёртых ячеек.
Данный режим является наследием от ПО для программирования УФ-стираемых ПЗУ, большого практического смысла применительно к W27C512 в нём нет.
Ещё один режим, доставшийся от универсальной версии программатора - стирание [ключ /E]:
https://forum-img.guitarplayer.ru/2024/02/11/60pHv.png
альт.ссылка на изображение
Позволяет мгновенно (за 200 мс) стереть всю информацию в W27C512. Полезен скорее для отладки программатора.
Программирование [ключ /P]:
https://forum-img.guitarplayer.ru/2024/02/11/60EKp.png
альт.ссылка на изображение
Оба файла образа должны находиться на указанном устройстве (традиционно, без явного указания диска, поиск файлов осуществляется на рабочем диске ОС - "B:"), размер файлов должен быть 32768 байт. Возможна прошивка только одного файла (т.е. только первых 32 Кб ПЗУ), если второй файл образа отсутствует.
Перед началом программирования всегда выполняется стирание микросхемы!
Программирование каждого файла состоит из двух фаз: прошивка и проверка/допрошивка. Каждая фаза отображается своими символами, заполняющими индикатор прогресса.
Если во время проверки обнаруживаются несоответствия ячеек, то, согласно алгоритму производителя, выполняется до 10 попыток допрошить проблеммные ячейки.
В финале, если все ячейки запрограммированы успешно, выводится соотвествующее сообщение:
https://forum-img.guitarplayer.ru/2024/02/11/60dej.png
альт.ссылка на изображение
Альтернативный режим программирования [ключ /W]:
https://forum-img.guitarplayer.ru/2024/02/11/60gIC.png
альт.ссылка на изображение
Отличие в отсутствии запроса подтверждения действия. Для ускорения работы продвинутых пользователей :)
Проверка [ключ /V]:
https://forum-img.guitarplayer.ru/2024/02/11/60t9r.png
альт.ссылка на изображение
Сравнение содержимого ПЗУ с образом. В режимах программирования выполняется автоматически.
Чтение [ключ /R]:
https://forum-img.guitarplayer.ru/2024/02/11/60G8u.png
альт.ссылка на изображение
Чтение содержимого ПЗУ с сохранением в файлы образа на диск.
PS по вопросам изготовления печатной платы обращаться к Сергею
Драйвер расширения ExtDRV v2.7
Драйвер расширения ExtDRV
Дальнейшее развитие ОС DSDOS привело к расширению функционала модуля консольного ввода-вывода CONIO с помощью драйвера ExtDRV.
Дополнительные процедуры позволяют организовать диалог с помощью оконного интерфейса, а также содержат готовые компоненты навигации по дискам/файлам и операций с ними.
Драйвер расширения интегрируется в ОС и его функционал доступен через API DSDOS (call BIOS, пул номеров подпрограмм: 50..61h).
Для работы требуется ОС DSDOS версии 3.87 и выше. Начиная с версии 3.88 драйвер будет интегрирован в сборки ОС, а на предыдущей версии возможна его установка с помощью утилиты EXTINST$:
https://forum-img.guitarplayer.ru/2024/02/11/60IcH.png
альт.ссылка на изображение
Статус и версию установленного драйвера ExtDRV можно посмотреть утилитой SYSTEM$:
https://forum-img.guitarplayer.ru/2024/02/11/60NnY.png
альт.ссылка на изображение
Концепт
Каждый элемент интерфейса представляется в виде т.н. окна, прямоугольной области символьного экрана, заключённой в рамку (или без неё). Рабочая область окна представляет собой уменьшенную версию символьного экрана, в котором действует стандартный функционал консольного ввода-вывода ОС DSDOS:
https://forum-img.guitarplayer.ru/2024/02/11/60SXF.png
альт.ссылка на изображение
Драйвер поддерживает работу с двумя типами окон:
1) Простое;
2) Сохраняемое.
Простое окно строится только в экранной области, при этом содержимое экрана на его месте теряется безвозвратно. При построении окна второго типа, драйвер предварительно сохраняет содержимое экрана под ним во временный файл на квазидиске, т.о. реализуется возможность "закрыть окно", с полным восстановлением информации под ним на экране. Механизм открытия/закрытия сохраняемых окон реализован по принципу стэка (LIFO). Каждое открытое окно второго типа создаёт свой временный файл на квазидиске, при закрытии окон соответствующие временные файлы удаляются. Максимальное количество открытых сохраняемых окон (теоретический программный предел - 255) ограничено их размерами, режимами открытия и свободным местом на квазидиске.
Сохранение и восстановление содержимого экрана под окнами реализованы с помощью ускоренных алгоритмов с использованием инструкций POP/PUSH, что позволило добиться приемлемой скорости на классическом Орионе-128 с процессором КР580ВМ80А (такт 2,5 МГц).
Окна обоих типов могут быть открыты в одном из двух режимов:
1). Монохромный;
2). Цветной.
В первом варианте окно строится только на переднем плане экранной области, атрибуты цвета остаются без изменений. При этом у сохраняемого окна во временный файл также записываются только данные переднего плана, что по сравнению с цветным режимом занимает в 2 раза меньше места на квазидиске. Во втором варианте окно окрашивается в заданный программистом цвет, и сохраняются атрибуты цвета под окном. Также устанавливается соответствующий режим отображения символов.
Вид рамки задаётся отдельной процедурой конфигурации драйвера, и действует на все последующие открываемые окна. Есть также глобальная настройка "рамка по-умолчанию", этот вид рамки устанавливается при вызове процедуры конфигурации с кодом рамки FFh, данный функционал позволяет пользователю на уровне системы настраивать вид рамок окон в программах по своему вкусу. Доступны следующие виды рамок:
00h – без рамки*;
01h – одиночная «┌─»;
02h – двойная «╔═»;
03h – жирная «██»;
04h – сетка «▓▓»;
05h – орнамент «■■»;
06h – шахматная «https://upload.wikimedia.org/wikiped...Spectrum89.svg»;
20h..FDh – пользовательская**.
_____________________________
* вся площадь окна доступна для консольного ввода-вывода, в остальных случаях рабочая область окна: (Ширина - 2) х (Высота - 2);
** рамка рисуется символом с соответствующим ASCII-кодом.
https://forum-img.guitarplayer.ru/2024/02/11/604rS.png
альт.ссылка на изображение
Работа с драйвером (информация по программированию)
Программный интерфейс драйвера описан в библиотеке WUI.L (SDK ОС DSDOS).
Первая процедура (EXTDRV_VERSION, код=50h) возвращает номер версии драйвера (традиционно, в BCD-арифметике), а также ID-код (BBh) и рабочую страницу ОЗУ драйвера.
Следующие две процедуры задают/возвращают (SET_TMP_DISK и GET_TMP_DISK, 51h и 52h, соответственно) диск для хранения временных файлов сохраняемых окон (по-умолчанию, это квазидиск «B:»).
Далее следуют процедуры записи/чтения конфигурации драйвера: SET_EXTDRV_CFG и GET_EXTDRV_CFG (53h и 54h). В текущей версии драйвера обслуживают типы рамки: текущий и «по-умолчанию», подробное описание в библиотеке WUI.L.
Следующими идёт группа процедур открытия/закрытия окон (55..59h).
Для открытия окна любого типа требуется указание следующих параметров:
1). Координаты левого верхнего угла (далее - ЛВУ): X (0..45*), Y (0..29*);
2). размеры: ширина (3..48*), высота (3..31*);
3). Цвет (00**..FFh***).
______________________________
* значение параметра в символах;
** значение 00h задаёт "монохромный" режим;
*** значение FFh не меняет текущий режим отображения, в случае цветного режима в качестве цвета берётся цвет родительского окна.
Размеры окна включают символы рамки (при её наличии), рабочая область окна на два символа меньше по каждому направлению.
Минимальный размер окна 3х3 (два символа рамки и один символ рабочей области), в соответствии с этим правилом заданы граничные значения геометрических параметров.
Процедуры открытия окна производят проверку параметров на корректность, в случае выхода окна за границы экрана, построение не производится и возвращается установленный флаг <C>, свидетельствующий об ошибке открытия окна.
В случае работы с сохраняемыми окнами также может иметь место ошибка файловых операций при сохранении/восстановлении содержимого под окном, в этом случае флаг <C> также будет установлен, а рег. [A] будет содержать код ошибки DSDOS. В программе пользователя достаточно отработать ошибку открытия окна, т.к. проблем с закрытием уже открытого быть не должно (за исключением случаев порчи содержимого квазидиска программой пользователя).
Краткий перечень процедур работы с окнами:
55h (WN_OPEN) – открытие простого окна, без сохранения содержимого экрана под ним;
56h (WN_CLOSE) – закрытие простого окна (восстановление параметров предыдущего окна/экрана);
57h (WN_OPEN_SAFE) – открытие сохраняемого окна;
58h (WN_CLOSE_SAFE) – закрытие сохраняемого окна;
59h (WN_CLOSE_AT_N) – закрытие всех сохраняемых окон до окна с номером N.
Подробное описание параметров см. в библиотеке WUI.L (SDK ОС DSDOS). В общем случае, каждая процедура возвращает статус (флаг <C>) и т.н. дескриптор (кординаты ЛВУ, размеры и номер) текущего окна. Размеры соответствуют фактическим размерам рабочей области окна. Номер первого открытого окна = 01h, второго = 02h и т.д.. Главный экран ПРК виртуально является «окном» с номером 00h. Для корректного завершения программы пользователя из произвольного места, требуется вызвать процедуру 59h с параметром N=00h, т.о. будут закрыты все открытые ранее окна. Это актуально только для сохраняемых типов окон. Открытие простого окна не изменяет счётчик окон, т.к. такое окно не участвует в процессе создания временных файлов на диске и восстановление содержимого под ним не требуется.
"Закрытие" простого окна восстанавливает параметры экрана до его открытия. Закрытие сохраняемого окна восстанавливает содержимое экрана под ним и параметры предыдущего окна.
Организация меню выбора представлена двумя процедурами: «Вертикальный список» (WN_MENU_VERT, код=5Ah) и «Горизонтальный список» (WN_MENU_HORIZ, код=5Bh):
https://forum-img.guitarplayer.ru/2024/02/11/60BLR.png
альт.ссылка на изображение
https://forum-img.guitarplayer.ru/2024/02/11/60HKV.png
альт.ссылка на изображение
В рег. паре [HL] передаётся указатель на структуру меню (строки последовательно, в формате ASCII), в остальных регистрах – параметры и режимы работы (подробности в библиотеке WUI.L).
Пример объявления структуры вертикального меню:
Код:
MENU_VERT:
DB ' Пункт #1 '
DB ' Пункт #2 '
DB ' Пункт #3 '
Процедуры не производят открытие нового окна и вывод заголовка, они только организуют само меню. Структура меню создаётся относительно текущих координат курсора, т.о. возможно произвольное расположение меню в текущем окне или на главном экране ПРК.
Для удобства программирования (минимизации кода ) есть режим закрытия последнего сохраняемого окна при выходе из меню, при этом, разумеется, окно должно быть открыто на момент вызова меню.
Меню представляет собой список пунктов, текущий отображается инверсией. Для навигации по пунктам используются стрелки и клавиши [Home]/[End], выбор текущего осуществляется клавишей [Enter]. Также возможен быстрый выбор нажатием цифры [1..9], соответствующей порядковому номеру пункта в списке.
Следующая группа процедур (5C..5Fh) представляет собой готовые компоненты работы с дисками и списками файлов на них, реализующие следующий функционал: выбор диска (из доступных в ОС), выбор каталога (на дисках F, G и H), выбор/открытие файла, сохранение файла.
Краткий перечень процедур:
5Ch (MENU_FOPEN_MIN) – сокращённое меню выбора файла, без открытия/закрытия окна;
5Dh (MENU_FOPEN) – расширенное меню выбора файла, без открытия/закрытия окна;
5Eh (WN_MENU_FOPEN) – расширенное меню открытия файла, с открытием/закрытием окна;
5Fh (WN_MENU_FSAVE) – расширенное меню сохранения файла, с открытием/закрытием окна;
Первые две процедуры универсальные, подходят для организации диалогов любых операций с файлами, не имеют никакой привязки к окнам, структура меню строится от текущих координат курсора, всё оформление диалога выполняет программист непосредственно перед вызовом процедуры.
В сокращённом варианте минимум входных параметров, список файлов представлен только их именами:
https://forum-img.guitarplayer.ru/2024/02/11/60Tz2.png
альт.ссылка на изображение
B расширенном задаётся режим отображения полей файлов в списке (вывести/скрыть: адрес посадки, длину hex/dec, атрибут защиты, страницу ОЗУ и дату):
https://forum-img.guitarplayer.ru/2024/02/11/60xNJ.png
альт.ссылка на изображение
Процедуры 5Eh и 5Fh являются готовыми компонентами открытия и сохранения файла, соответственно. Они самостоятельно открывают своё отдельное сохраняемое окно, положение и размеры которого автоматически подбираются так, чтобы оно было расположено в центре экрана ПРК:
https://forum-img.guitarplayer.ru/2024/02/11/60C9m.png
альт.ссылка на изображение
По завершении выбора файла, окно диалога автоматически закрывается, содержимое экрана под ним восстанавливается и в программу пользователя возвращается дескриптор выбранного файла (в BIOS'е установлен текущим выбранный диск и имя файла).
В процедуре сохранения файла есть возможность выбрать имя файла из уже имеющихся в списке (запись «поверх») или ввести новое (соотв. поддиалог вызывается клавишей пробела):
https://forum-img.guitarplayer.ru/2024/02/11/60hJc.png
альт.ссылка на изображение
В случае записи «поверх», процедура самостоятельно удаляет одноимённый файл на диске!
https://forum-img.guitarplayer.ru/2024/02/11/60ncy.png
альт.ссылка на изображение
Непосредственно команды чтения/записи файлов и обработки статуса их исполнения программист выполняет самостоятельно, процедуры драйвера организуют только все необходимые подготовительные работы.
Во всех процедурах с файлами в рег. паре [HL] передаётся указатель на ASCII-строку (признак конца – 00h) шаблона(ов) для отбора файлов, отображаемых в списке. Если шаблонов несколько, то они разделяются пробелами. Например:
При [HL]=0000h отбор игнорируется и выводится полный список файлов.
Кол-во файлов, видимых на экране (в окне) задаётся при вызове соответствующей процедуры. Если полный список длиннее, то реализуются скроллинг и листание страниц, а также переходы в начало/конец списка по Ctrl+[Home]/[End]. Навигация стрелками, [Home]/[End], [PgUp]/[PgDown], выбор файла – [Enter].
Выбор диска осуществляется нажатием соответствующей буквы [A..H], обновить содержимое текущего диска можно с помощью Ctrl+[R].
В заголовке отображается название действия, текущий диск и, если указан(ы), шаблон(ы) отбора файлов.
Внизу под списком файлов слева выводится номер текущего файла, на котором находится указатель, а справа в квадратных скобках общее количество файлов на диске.
В случае вызова файловых процедур с параметром «диск по-умолчанию» (имя диска = 00h, подробности в библиотеке WUI.L), страница и положение указателя последнего выбранного файла в списке запоминается, и при последующем вызове диалога восстанавливается (если содержимое диска к тому моменту не изменилось).
Заключительные две процедуры 60h и 61h выводят на экран сообщения в окне. Первая (WN_SHOW_ERROR) выводит расшифровку ошибки DSDOS, а вторая (WN_SHOW_MSG) выводит сообщение пользователя. Процедуры самостоятельно открывают и закрывают окно, размещение которого автоматически рассчитывается таким образом, чтобы оно было в центре экрана ПРК. В обоих случаях окно сохраняемого типа, в первом оно фиксированного красного цвета, во втором цвет (или его отсутствие) задаёт программист. Окно с сообщением пользователя имеет три режима:
1) Мигающий курсор после сообщения;
2) Курсор погашен;
3) Второй строкой выводится: [Enter]/[..]/[Esc].
Окно закрывается по нажатию любой клавиши, в программу возвращается её код, а флаги МП установлены как при возврате из процедуры INPUT_KEY модуля CONIO.
В процессе работы некоторых процедур драйвер использует область ОЗУ атрибутов цвета теневого экрана (8000..AFFFh стр.#1) для буферизации данных сохранения экрана под окнами и построения списка файлов по шаблону(ам), а также используются участки непереключаемого ОЗУ F300..F32Fh и F370..F37Fh для кода быстрого переноса экранных данных и формирования имён файлов, это следует учитывать при вызове процедур ExtDRV.
Демо
Для демонстрации возможностей драйвера ExtDRV написана программа EXTDEMO$, в архиве также прилагается её исходный код.
https://forum-img.guitarplayer.ru/2024/02/11/60vnh.png
альт.ссылка на изображение
__________________________________________________ __________________________________________________ _
Ссылка для скачивания - архив в формате *.ORI