Электронные Франкенштейны

Гестаповцы перекрыли все выходы,
но Штирлиц вышел через вход!

(общеизвестный анекдот)


Предостережение

Если вы решили заняться микроконтроллерами, то вам лучше купить на рынке новый чип, найти к нему руководство и примеры в интеренете или новых журналах. Но если у вас есть "хлам", который жалко выбросить, то его часто можно использовать для других целей.


Кто живет в клавиатуре...

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

"Оживим" контроллер 8049. Для этого по классической схеме на картонке соберем схему для подключения внешнего ПЗУ с панелькой и регистром-защелкой младших разрядов адреса. Подключим схему к контроллеру, вывод EA у контроллера отрежем от "земли" и резистором 2кОм подключим к +5В.

Напишем программу (я использовал ассемблер SBASM) и запишем ее в ПЗУ (или эмулятор) при помощи программатора. Включаем - смотрим результат.

Конечно, это не самое полезное применение, однако дальше - уже дело фантазии.


Мамка, подмигни!

Сколько выброшено живых и полуживых компьютеров с процессорами от 8086 до ...! Конечно, вряд ли они интересны по своему основному предназначению, а использование для других целей затруднительно иногда даже из-за размера. Однако можно взять только материнскую плату с портом LPT - и уже ее можно использовать. Причем для питания часто достаточно только 5 вольт, что упрощает поиск источника питания. Программу проще всего разместить в ПЗУ BIOS - либо вместо, либо в "свободные" зоны существующего BIOS, перезаписав его полностью. Конечно, более предпочтительный способ - разместить свою программу в расширенном ПЗУ, но это отдельная история.

Для примера возьмем материнскую плату с 386 процессором, даже не устанавливая на нее память, установим порт LPT, временно удалим "родной" BIOS и вставим вместо него эмулятор ПЗУ со своей программой.

Программа на fasm-e
;=========================================
   rom_size  = 800h
   rom_start = 100000h - rom_size
   rom_empty = 0FFh
;=========================================
   use16
;-----------------------------------------
start:
   mov dx,378h
   mov al,0
next:
   out dx,al
   mov cx,07FFFh
delay:
   loop delay
   not al
   jmp next
;-----------------------------------------
   times rom_size - 16 - $ db rom_empty
;-----------------------------------------
boot:
   jmp (rom_start shr 4):start
;-----------------------------------------
   times rom_size - $ db rom_empty
;=========================================

Включаем


Расширение BIOS (ROM extension)

вариант на английском языке

Для использования материнских плат от старых компьютеров желательно иметь программы, записанные в ПЗУ. Однако метод, указанный выше, не очень удобен, так как при замене BIOS целиком нам необходимо самостоятельно выполнять всю инициализацию периферии, которая, к тому же, скорее всего недокументирована. Гораздо надежнее использовать возможности сервиса BIOS ROM extension.

Для экспериментов я собрал плату на базе бывшей сетевой карты с разъемом ISA. Плата задумана как универсальная - для поддержки любых микросхем ПЗУ от 2К до 64К. Это связано с "разномастным" набором ПЗУ у меня, практически все из которых - б/у. Адресное пространство начинается с 0D0000h. Думаю, можно вполне обойтись сетевой картой с разъемом для ПЗУ, однако те, которые я встречал, расчитаны только под 2764. Также можно переделать сетевую карту под конкретный тип ПЗУ, что будет все равно проще, чем делать универсальную плату.

Для написания программ для расширенного ПЗУ вначале подготовил утилиту, которая вычисляет сумму образа ПЗУ, а также предлагает число для коррекции этой суммы до нулевого значения: это необходимо, так как BIOS выполняет эту операцию перед запуском программы в ПЗУ, чтобы убедиться, что ПЗУ не повреждено.

Теперь пишем простое приложение - только вывод строки и ожидание нажатия клавиши. Записываем в ПЗУ, ПЗУ вставляем в плату, а плату - в свободный разъем материнской платы. Смотрим результат:


(далі буде (можливо...))
Последнее обновление: 2013-04-28 14:18:54 EEST