yes1111: (веселка)
[personal profile] yes1111


Возникла тут у меня на днях задачка: перешить “запоротый” BIOS материнской платы (стартовать после обновления она отказывалась). По такому случаю из пыльного чулана был извлечен программатор BiDiPro. А уж если решено его завести и вернуть к активной жизни — то почему бы не сделать это под Linux? Тем более, что вещь объективно хорошая и в хозяйстве всегда пригодится.



Нативного софта под Linux мне пока не попадалось, поэтому решено было поднимать программатор с тем, который есть.

Изначально программное обеспечение для BiDiPro писалось под DOS.


Впоследствии энтузиасты написали также кое-что также и под Win 95/98/NT4.0/2000/XP (здесь и здесь), но DOS'овский софт на сегодня все равно остается наиболее полным, документированным и отработанным.

Для запуска DOS-программ под Linux'ом существуют, как минимум, два широко распространенных эмулятора: DOSBox и DOSEMU.

DOSBox, при всех своих многочисленных достоинствах, имеет весьма существенный недостаток: отсутствие эмуляции LPT-порта (с возможностью «отображения» на «живое железо»), что в нашем случае абсолютно неприемлемо. Так что единственным вариантом остается DOSEMU.

Итак, начнем по порядку.

1. Для работы программатора LPT-порт должен обеспечивать режим двунаправленной передачи данных (EPP). Если порт интегрирован в материнскую плату, то перед загрузкой компьютера заходим в BIOS Setup и убеждаемся, что для LPT-порта включен режим EPP или ECP+EPP (только не SPP!). 1.7 или 1.9 — в нашем случае не имеет значения.

2. Установить DOSEMU в Ubuntu можно прямо из репозитория, выполнив команду:

sudo apt-get install dosemu

При работе с другими дистрибутивами Linux синтаксис команды может быть иным, но суть от этого не меняется. Вообще, все нижеизложенное проверялось с дистрибутивом Ubuntu 10.04 LTS – 64-bit (архитектура amd64). Впрочем, к 32-битной версии (архитектура i386) это применимо в той же степени.

3. Итак, DOSEMU установлен. Сразу после запуска появляется «ужасное» сообщение об ошибке:

LOWRAM mmap: Операция не позволяется
Cannot map low DOS memory (the first 640k).
You can most likely avoid this problem by running
sysctl -w vm.mmap_min_addr=0
as root, or by changing the vm.mmap_min_addr setting in
/etc/sysctl.conf or a file in /etc/sysctl.d/ to 0.

Открываем файл /etc/sysctl.conf и исправляем значение vm.mmap_min_addr = 65536 на vm.mmap_min_addr = 0.

4. После первого успешного запуска DOSEMU в домашней папке текущего пользователя /home/<имя_пользователя> появится «невидимая» папка .dosemu

Увидеть ее можно, включив в Nautilus'е опцию «Вид — Показывать скрытые файлы»

Внутри этой папки находится также папка drive_c, которую эмулятор DOSEMU воспринимает как диск c:

5. Для удобства работы в DOS настоятельно рекомендую установить какой-либо файловый менеджер, например, Volkov Commander. Сделать это можно, к примеру, отсюда. Скачиваем, раззиповываем и копируем содержимое архива в папку:
/home/<имя_пользователя>/.dosemu/drive_c/vc


Для удобства запуска можем добавить в файл autoexec.bat, находящийся также в папке .dosemu, строку: vc\vc. Теперь при каждом запуске DOSEMU будет автоматически запускаться Volkov Commander:



6. Скачиваем отсюда софт для работы с BiDiPro. Раззиповываем в папку BIDIPRO, созданную на диске c: эмулятора (/home/<имя_пользователя>/.dosemu/drive_c).

7. Далее, нашей программе нужен прямой доступ к LPT-порту. Без этого никак. Например, в моем случае при попытке обращения к микросхеме, вставленной в программатор, на принтере начинает печататься всякая белиберда. И это при том, что принтер сетевой и физически подключен к совсем другому компьютеру!

Открываем файл /etc/dosemu/dosemu.conf, находим в нем раздел «Direct hardware access» и дописываем строку:

$_ports = "fast range 0x378 0x37f"

(подразумевается, что надо открыть прямой доступ к порту LPT1, занимающему диапазон адресов 0x378 — 0x37f).

Если порт расположен по другим адресам, то пишем туда их. Так, для порта LPT2 (если таковой имеется и расположен по базовому адресу 278h) следует записать:

$_ports = "fast range 0x278 0x27f"

а для системы с двумя портами -

$_ports = "fast range 0x378 0x37f"
$_ports = $_ports, " fast range 0x278 0x27f"

Вообще, для получения детальной информации об LPT-портах, установленных в Вашем компьютере, можно воспользоваться командой:

dmesg | grep -i parport

Вывод:

[ 29.592550] parport_pc 00:0a: reported by Plug and Play ACPI
[ 29.592602] parport0: PC-style at 0x378 (0x778), irq 7, dma 3 [PCSPP,TRISTATE,COMPAT,EPP,ECP,DMA]
[ 29.673052] lp0: using parport0 (interrupt-driven)

означает, что в системе присутствует один LPT-порт, который расположен по базовому адресу 378h, использует прерывание IRQ 7 и канал ПДП DMA 3 и может работать в режимах SPP, EPP и ECP.

8. Подключаем программатор кабелем, включаем его питание и запускаем DOSEMU обязательно с правами суперпользователя и с ключом -s. В случае Ubuntu это будет:

sudo dosemu -s

Теперь запускаем из DOSEMU файл bidipro.exe. Настраиваем параметры программатора, вставляем микросхему, наслаждаемся результатом:



«Тонкую» настройку ПО программатора выполняем в полном соответствии с инструкцией, содержащейся в том же архиве, где и собственно софт. Успехов!

Приложение. В некоторых случаях одного LPT-порта бывает недостаточно. Всеобъемлющих рекомендаций на этот счет дать не могу, но личным опытом охотно поделюсь. Так, на работе мы подключили к одному компьютеру 2 спектрофотометра через LPT-порты. Софт для этих спектрофотометров написан тоже под DOS, поэтому все вышеизложенное справедливо и для этого случая. Поскольку материнская плата (выпуска примерно 2001 г.) еще имеет слот ISA, решено было попробовать простой и дешевый выход из положения: установить старую «ISA'шную» карту с LPT-портом — благо, на сегодня они в изобилии валяются в хламе и стоят сущие копейки. При этом дополнительная карта конфигурировалась джамперами как LPT1 (базовый адрес 378h, IRQ7), а интегрированный порт на материнской плате — через BIOS Setup как LPT2 (базовый адрес 278h, IRQ5).

Неприятным сюрпризом оказалось то, что почти на всех «ISA'шных» картах LPT-порт поддерживает только режим SPP, что для нас неприемлемо. Так, популярный в свое время чип GoldStar Prime 2C (как и его модификации) именно по этой причине оказался непригодным:





После многочисленных экспериментов была найдена плата, на которой есть именно EPP LPT-порт:





Обратите внимание на маркировку чипа: STARTECH ST16C552CJ. Это — РАБОТАЕТ!

На сегодняшний день все это хозяйство вот уже около года успешно работает под управлением Ubuntu 10.04 LTS i386. В файл /etc/dosemu/dosemu.conf прописано:

$_ports = "fast range 0x378 0x37f"
$_ports = $_ports, " fast range 0x278 0x27f"

Естественно, работоспособные материнские платы со слотом ISA на сегодня уже раритет. Поэтому хотелось бы знать, будут ли работать в наших целях более современные устройства — платы PCI-LPT и USB-LPT. Честно скажу: пока не пробовал, выдумывать не буду. По идее, насчет первых прогноз скорее оптимистический. Надо только посмотреть на вывод команды:

dmesg | grep -i parport

Если система видит и правильно опознает порт, то попробовать указать в файле /etc/dosemu/dosemu.conf диапазон его адресов относительно базового (последний в этом случае будет нестандартным). Что касается переходников USB—LPT, то здесь все кажется грустнее: по некоторым (не проверенным пока лично) сведениям, такой порт непригоден для низкоуровневого программирования. Впрочем, подвернется возможность — проверю. А то ведь как, к примеру, с теперешними ноутбуками бороться?



[upd]: Продолжение (применительно к RHEL-подобным дистрибутивам) смотрим здесь.

(no subject)

Date: 01/03/2012 02:45 (UTC)
From: [identity profile] poyeliku.livejournal.com
Открыла папку Downloads и плачу,а ты тут пингвинятник развёл ещё)

(no subject)

Date: 01/03/2012 02:54 (UTC)
From: [identity profile] yes1111.livejournal.com
Не плачь, девчонка: пройдут дожди! (с)
А пингвин суть птица благородная, солидная, в хозяйстве однозначно полезная, а сверх того - отличается умом и сообразительностью. А чё накачала-то такого слезоточивого, если не секрет?

(no subject)

Date: 01/03/2012 02:58 (UTC)
From: [identity profile] poyeliku.livejournal.com
Не,ничего я не качала(зять уехал уже,боюсь чего лишнего нахватать.Я в ней просто никогда разобраться не могла.Это я для красного словца,тёмная и сакральная она для меня.

тёмная и сакральная

Date: 01/03/2012 03:07 (UTC)
From: [identity profile] yes1111.livejournal.com
Дык не для юзверей она писалась, а для таких же бедолаг, чью кровушку они (юзвери) пользуют литрами, невзирая на обстоятельства и время суток. Ладно, пойду попухнуть минут этак n. Спокойной ночи(-?) ! :-))
Edited Date: 01/03/2012 03:08 (UTC)
From: [identity profile] yes1111.livejournal.com
Перечитал с утра и понял, что ты про свою папку отозвалась. А я по причине сонности про свой опус подумал. А папку Downloads (или как там ее у тебю) лучше сразу рассортировать по темам и растаскивать файлы по полочкам непосредственно после закачки и проверки на вшивость, не давая ей превратиться в конюшни имени царя Авгия. А иначе - действительно, сочувствую...
Edited Date: 01/03/2012 09:47 (UTC)
From: [identity profile] poyeliku.livejournal.com
Именно,что конюшня с дохлыми конями.
Я там всё потерянное после закачек ищу. И убей меня, всегда не знаю,откель её,саму папку, в прошлый раз я вытаскивала на свет божий. Что-то мне подсказывает,что не у меня одной так.

Profile

yes1111: (Default)
yes1111

June 2021

M T W T F S S
 123456
7891011 1213
14151617181920
21222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags