Проект Sprinternet

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Проект Sprinternet

Post by Shaos »

У нас тут время роадмапов - вот моя "дорожная карта" :)
1) делается макетка сетевой карточки для Спринтера на базе вот этого прототипа;
2) делается набор драйверов для работы с сокетами через эту карточку (WizNET W5100);
3) пишется/портируется набор сетевых программ, начиная с браузера (Sprinternet Browser);
4) на этом этапе уже можно пользоваться простыми сайтами (см. тут);
5) пишется сервер, который делает обработку сложных случаев (HTTPS, большие JPEG/PNG, работа с большими архивами);
6) делается боевой вариант платы на продажу/раздачу дизайнов как опенсорц;
7) при наличии интереса покупаем 4096 MAC-адресов для внедрения в боевые платы.

P.S. Сделал репу на гитлабе 30 января 2021 и перенёс её в раздел nedopc 7 сентября 2024:

https://gitlab.com/nedopc/net

(основная лицензия - Affero GPL)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Project SprinterNet

Post by Shaos »

Отпочковано из соседнего топика
Shaos wrote:Вобщем как я и написал чуть выше, я делаю Sprinternet - Ethernet для Спринтера, который начинался в 2016 году как Ethernet для TS2068 (по идее можно сделать единую PCB от которой надо будет отпиливать лишние части, чтобы получить либо Sprinternet-ISA8, либо Sprinternet-TS2068). На борту кроме модуля WizNet (на базе W5100) есть GPIO, 2Кб ОЗУ, 8Кб ПЗУ, SPI EEPROM 25C320 на 4КБ (для хранения MAC-адреса и настроек сети - можно наверное память и побольше поставить, например 25LC1024 на 128КБ, тогда её можно как квазидиск задействовать) и, в будущем, слот для SD-карточки. ПЗУ чтобы сразу иметь "драйвера" без необходимости что-то доустанавливать в DSS, а ОЗУ - для хранения рабочей области переменных для этих самых "драйверов". Можно даже единый код иметь для Спринтера и Timex Sinclair 2068, определяя тип машины программно ;)

Минимальный набор драйверов - функции работы с BSD-сокетами, чтобы можно было программировать любые TCP/IP примеры "из книжки", а также функции работы с EEPROM (чтобы давать пользователю функции, обходящие запрещённые зоны, где хранятся MAC-адрес и настройки сети) и SD-карточкой (если будет). Внешними будут программы, использующие эти сокеты (программы естественно разные для разных машин) - HTTP сервер (я его уже писал для W5100 в 2007 году правда в кодах PIC17), HTTP клиент (браузер), а также можно скажем FTP клиента и NTP клиента ещё сделать. Вобщем как-то так...

P.S. Ещё идея у меня была т.к. WizNet не хранит в себе MAC-адрес (его надо программно прописывать), можно под мою карманную корпорацию официально зарезервировать диапазон MAC-адресов, записав адреса оттуда в EEPROM-ы, которые раздавать вместе с платами. Сейчас блок из 4096 адресов стоит $780 выплаченных однократно - подробнее см.https://standards.ieee.org/products-services/regauth/oui36/index.html) :dj:

P.P.S. Как альтернатива покупке блока адресов может выступать EEPROM с зашитым в него MAC-адресом типа 93AA46AE48 (1K Microwire Serial EEPROM with EUI-48), хотя по сути это тоже самое т.к. судя по документации, юзер может перезаписать байты, где записан MAC-адрес.

P.P.P.S. Можно не давать пользователю API на доступ к записи в EEPROM байтов и блоков, а вместо этого выдать абстрактный API для некоего key=value persistant storage (с замахом на поддержку cookies в будущем).
Про BSD-сокеты:
https://en.wikipedia.org/wiki/Berkeley_sockets
https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%BA%D0%B5%D1%82%D1%8B_%D0%91%D0%B5%D1%80%D0%BA%D0%BB%D0%B8

Предполагаемый API выполняемый из ПЗУ: viewtopic.php?f=60&t=20283&start=45
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Project SprinterNet

Post by Shaos »

По софту - хотелось бы довести браузер SNB до возможности работать с nedoPC-форумом и nedoPC-вики - для этого например надо поддержать cookies:
nedoPC-org-header.gif
(cжатие можно отменить)

Браузер можно научить отрисовывать SCR, GIF и даже небольшие JPG (есть достаточно компактный целочисленный декодер на сях)
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Project SprinterNet

Post by Shaos »

Диапазоны адресов карточки Sprinternet (описание изменено, чтобы соответствовать прототипу №3):

Code: Select all

0xC0XX - WizNET registers (read/write controlled by TX/RX)
0xC1XX - CONTROL (write only):
   bit 0 - TX/RX (0 is TX/write, 1 is RX/read)
   bit 1 - SPI0 - (SPI device: 00-Nothing, 01-EEPROM, 10-SD/MMC, 11-External)
   bit 2 - SPI1 /
   bit 3 - SCK (sync for SPI)
   bit 4 - OUT1 (user output 1)
   bit 5 - OUT2 (user output 2)
   bit 6 - OUT3 (user output 3)
   bit 7 - MOSI (serial output to SPI)
0xC2XX - SPI (bit 0 - read only from MISO SPI)
0xC3XX - INPUTS (read only)
0xC4XX - WizNET socket 0 (read/write controlled by TX/RX)
0xC5XX - WizNET socket 1 (read/write controlled by TX/RX)
0xC6XX - WizNET socket 2 (read/write controlled by TX/RX)
0xC7XX - WizNET socket 3 (read/write controlled by TX/RX)
0xC800...0xCFFF - RAM 2K (read/write)
0xD000...0xD7FF - ROM 2K (always read only)
0xD800...0xDFFF - ROM 2K (switchable on write)
0xE000...0xFFFF - WizNET buffers (RX or TX)
Программно проверено, что регистры и читаются, и пишутся, как и область TX, а вот в область RX писать нельзя - оттуда только читаем.
W5100 имеет четыре сокета, каждый из которых может иметь 1,2,4 или 8 килобайт отведённых под него в области RX и в области TX (размеры в разных областях задаются независимо друг от друга и могут отличаться).

P.S. Описание обновлено 21 января 2021 года
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Project SprinterNet

Post by Shaos »

В связи с уже доказанной кривизной спринтеровской исы слегка изменил логику работы схемы - теперь контрольный бит TX/RX (расположенный по адресу #C100), кроме переключения областей в последних 8кб, теперь ещё и управляет установкой чтения либо записи из визнета либо SPI:
TX (0) - означает, что мы пишем в визнет или SPI - при этом чтение запрещено (защита от мусорных /MEMR);
RX (1) - означает, что мы читаем из визнета или SPI - при этом чтение разрешено (собственно как и запись, которая может работать нестабильно).

ПЗУ разбито на 4 окна, переключемых путём записи в переключаемую область ПЗУ (0xD800...0xDFFF), но для пущей логичности можно считать адресом переключения #DFFF - это адрес последнего байта страницы ПЗУ, в который можно записать порядковый номер страницы плюс некая константа - например #A0, #A1, #A2, #A3, что позволит прочитать этот байт обратно после записи, чтобы удостовериться, что переключение произошло (описанный выше контрольный бит TX/RX не распространяется на ПЗУ, ОЗУ, триггеры и GPIO). Нулевая страница ПЗУ также всегда видна по адресам 0xD000...0xD7FF. В первых трёх байтах будет JP на инициализацию (3 байта), следом за которым (или по другому заранее известному адресу) может идти наименование платы и версия железа и прошивки - текстовая строка, завершающаяся нулём, например "SprinterNet v1.0.1 build 32 (2021-02-01)", 0

Пользователям будет рекомендовано использовать API из ПЗУ для работы с WIZNet и EEPROM, чтобы в будущем была возможность заменить сетевой модулёк или микросхему EEPROM.

ПЗУ в будущем также можно увеличить в объёмах (теоретически до 512 килобайт, адресуя 2КБ-страницы полными байтами вместо теперешних двух битов).

P.S. Также имея уникальные значения в последнем байте каждой страницы, можно достаточно просто узнать размер ПЗУ - пробуем переключиться на страницу #1F, записывая это число в #DFFF, и далее читаем обратно байт по адресу #DFFF:
- если там #A3, то размер ПЗУ 8К (как сейчас);
- если там #A7, то размер ПЗУ 16К;
- если там #AF, то размер ПЗУ 32К;
- если там #BF, то размер ПЗУ 64К.
Большие размеры наверное нет особого смысла задействовать, хотя ничего не мешает дойти до 512К...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Project SprinterNet

Post by Shaos »

Решил ещё более усугубить разделение чтения и записи для SPI - новый дизайн платы будет иметь немного другой формат регистра управления и работы со SPI - описание выше изменено, чтобы это отразить

Code: Select all

   бит 0 - TX/RX (0 is TX/write, 1 is RX/read)
   бит 1 - SPI0 - (SPI device: 00-Nothing, 01-EEPROM, 10-SD/MMC, 11-External)
   бит 2 - SPI1 /
   бит 3 - SCK (sync for SPI)
   бит 4 - OUT1 (user output 1)
   бит 5 - OUT2 (user output 2)
   бит 6 - OUT3 (user output 3)
   бит 7 - MOSI (serial output to SPI)
А так же придумал добавить разъём DB15M на плату:

Code: Select all

 1 - IN0
 2 - IN1
 3 - IN2
 4 - IN3
 5 - IN4
 6 - IN5
 7 - IN6
 8 - IN7
 9 - /SCS3
10 - SCK
11 - OUT1
12 - OUT2
13 - OUT3
14 - MOSI
15 - MISO
и GND (в оплётке), а на питание вроде как места уже нету...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Project SprinterNet

Post by Shaos »

Попробовал написать простые PHP-скрипты для сервера, который делают перевод доменных имён в IP-адрес:

Code: Select all

<?php
$host = $_GET["host"];
$ip = gethostbyname($host);
echo $ip;
?>
и забирание HTTPS-контента с возвращением его через HTTP:

Code: Select all

<?php
$host = $_GET["host"];
$data = file_get_contents("https://".$host);
echo $data;
?>
Как ни странно - они работают :mrgreen:

В боевом варианте наверное надо предусмотреть работу только некоторых сайтов по списку, а то в дискорде сразу же предложили через мой сервер в порнхаб залезть :no:

P.S. Например есть очень симпатичный архив роялти-фри фоток: https://www.pxfuel.com (там иконки фоток шириной 350 пикселов, что вполне согласуется с полным разрешением графики Спринтера в 352x288, и поиск по ключевым словам через аргументы в урл, а также есть изменение размера картинки под произвольные размеры)

P.P.S. Ещё есть сайт анимированных гифок (упомянут в NedoOS): https://acegif.com

P.P.P.S. Ну и на спектрумовые ресурсы тоже можно так ходить - https://vtrd.in и https://worldofspectrum.net/ (в последнем случае можно добраться до SCR и ZIP-файлов через HTTP)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Project SprinterNet

Post by Shaos »

Вот чуть более навороченный резолвер, который возвращает IP-адрес в 16-ричном виде:

Code: Select all

<?php
$host = $_GET["host"];
$ip = explode(".",gethostbyname($host));
$ip1 = dechex(intval($ip[0]));
$ip2 = dechex(intval($ip[1]));
$ip3 = dechex(intval($ip[2]));
$ip4 = dechex(intval($ip[3]));
if(strlen($ip1)==1) {
 $ip1 = '0'.$ip1;
}
if(strlen($ip2)==1) {
 $ip2 = '0'.$ip2;
}
if(strlen($ip3)==1) {
 $ip3 = '0'.$ip3;
}
if(strlen($ip4)==1) {
 $ip4 = '0'.$ip4;
}
echo $ip1,$ip2,$ip3,$ip4;
?>
Возможно надо всё объединить в один index.php, чтобы обращаться сюда как http://sprinternet:8080/?host=...&op=... и т.д. (IP-адрес имени sprinternet уже будет сохранён в hosts компьютера). Кроме того это упростит ведение учёта - каждое использование объединённого PHP-скрипта будет фиксироваться в базе данных. Возможный набор операций:
op=resolv - возвращает IP-адрес по имени сервера host (операция по умолчанию);
op=version - возвращает версию серверного программного обеспечения;
op=unixtime - возвращает количество секунд прошедших с нуля часов 1 января 1970 года относительно сейчас либо относительно момента указанного в параметрах запроса (url-encoded param);
op=https - забирает содержимое указанной веб-страницы по HTTPS и возвращает по HTTP (имя сервера указано в параметре host, а необязательный путь к файлу - в url-encoded параметре param).

P.S. Вот пример получения текущего времени (если запущено без параметров) и перевода строки с датой и временем (например из куков) в unixtime (если с url-encoded параметром param, например param=Sat%2C%2029-Jan-2022%2003%3A28%3A17%20GMT вернёт 61f4b451):

Code: Select all

<?php
$param = $_GET["param"];
if($param){
  $time = strtotime(urldecode($param));
} else {
  $time = time();
}
echo dechex($time);
?>
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Project SprinterNet

Post by Shaos »

Для управления серверной частью через браузер (например добавление разрешённых сайтов или новых пользователей и т.д.) хотелось бы прикрутить https:// для которого нужен сертификат (кроме того сертификат нужен например для вебхуков телеграм-ботов, с которыми я уже начал играться). Существует бесплатный вариант - LetsEncrypt, но там надо ставить какого-то демона и я сомневаюсь что эти сертификаты совместимы со старыми браузерами - например я этот текст пишу из Safari 4.1.3 из MacOS X 10.4 на своём стареньком PowerBook G4 и по HTTPS он мало что показывает, но кое-что таки показывет - вот хотелось бы понять какие сертификаты с ним всё ещё совместимы...

P.S. Примеры HTTPS-сайтов всё ещё как-то работающих в старом сафари:

https://www.cnn.com - Verified by GlobalSign nv-sa (от $249 в год), TLS 1.2, однако сам globalsign.com НЕ открывается
https://www.google.com - Verified by Google Trust Services, TLS 1.3 (не нашёл способов купить такой сертификат - видимо гугл только сам для себя его печёт)
https://archive.org (сам архив, но не машина времени) - Verified by GoDaddy.com, Inc. (от $64 в год), TLS 1.2, однако сам godaddy.com НЕ открывается
https://hackaday.io - Verified by DigiCert Inc. (от $218 в год), TLS 1.2 (но НЕ hackaday.com который Verified by LetsEncrypt), однако сам digicert.com НЕ открывается...

и сайтов уже нормально не работающих, но и не ругающихся на несовместимость сертификата:

https://www.youtube.com
https://www.gmail.com

P.P.S. Вот чуть подробнее про разницу сертификатов DigiCert для hackaday.io (открывается в старом сафари) и обственно самого digicert.com (не открывается в старом сафари):
Screenshot from 2021-01-30 18-59-02.png
а также archive.org (открывается) и godaddy.com (не открывается):
Screenshot from 2021-01-30 19-07-35.png
видимо трюк в том, что это должен быть сертификат TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 128 bit keys, TLS 1.2 чтобы открываться в сафари 10-летней давности...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Project SprinterNet

Post by Shaos »

Shaos wrote: Возможно надо всё объединить в один index.php, чтобы обращаться сюда как http://sprinternet:8080/?host=...&op=... и т.д. (IP-адрес имени sprinternet уже будет сохранён в hosts компьютера). Кроме того это упростит ведение учёта - каждое использование объединённого PHP-скрипта будет фиксироваться в базе данных. Возможный набор операций:
op=resolv - возвращает IP-адрес по имени сервера host (операция по умолчанию);
op=version - возвращает версию серверного программного обеспечения;
op=unixtime - возвращает количество секунд прошедших с нуля часов 1 января 1970 года относительно сейчас либо относительно момента указанного в параметрах запроса (url-encoded param);
op=https - забирает содержимое указанной веб-страницы по HTTPS и возвращает по HTTP (имя сервера указано в параметре host, а необязательный путь к файлу - в url-encoded параметре param).
Возможное расширение для передачи сообщений:
op=auth - в параметре user передаётся имя пользователя, в param - хэш пароля (зависит от даты, т.е. пригоден только до полуночи по гринвичу), а в ответ с сервера уходит sid (Session ID) со временем жизни скажем сутки;
op=chat - вернуть все сообщения для пользователя (который идентифицируется полем sid) и если в param что-то есть, то это новое сообщение от пользователя (там в начале может быть указан идентификатор канала куда пишем), а для перемотки прочитанного можно пользоваться числовым параметром start (у каждого сообщения есть ID, который инкрементируется автоматически).
Та же самая авторизация может быть использована для некоторых других операций, например op=https и может быть даже op=resolv (чтобы исключить abuse со стороны случайных интернетчиков).

P.S. Добавил репу на гитлабе (лицензия будет Affero GPL)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Project SprinterNet

Post by Shaos »

Shaos wrote: op=unixtime - возвращает количество секунд прошедших с нуля часов 1 января 1970 года относительно сейчас либо относительно момента указанного в параметрах запроса (url-encoded param)
можно расширить ответ (попутно поменяв имя операции с unixtime на просто time) - следом за 4 байтами unixtime (8 шестнадцатиричных символов) в хексе возвращать дату и время в нулевой таймзоне (GMT): YYYYMMDDHHMMSS (7 байтов или 14 символов в BCD - т.е. всего 22 символа):

Code: Select all

<?php
$param = $_GET["param"];
if($param){
  $time = strtotime(urldecode($param));
} else {
  $time = time();
}
echo dechex($time),gmdate("YmdHis",$time);;
?>
это может оказаться полезным скажем для настройки часов Спринтера - надо будет в EEPROM сохранять таймзону и флаг летнего перевода времени ну или просто смещение от GMT, которое пользователю надо будет ручками менять 2 раза в год для стран, где летом время сдвигается:
DST_in_the_world.jpg
P.S. В мире существует целый ряд временных зон с "нецелым" смещением от GMT: https://www.worldtimeserver.com/learn/unusual-time-zones/
Самые странные из них:
...
As an example, at 12:00 AM in an area using Coordinated Universal Time (UTC) it is 5:30 AM in India.
...
Nepal is fifteen minutes ahead of India's time zone. That means, when it is 12:00 AM in Greenwich -- at the Prime Meridian -- it is 5:45 AM in the greater Nepal area and Kathmandu.
...
Australia : Eucla and nearby towns use UTC + 8:45.
...
The Chatham Islands -- located in New Zealand -- observe Chatham Standard Time which has a forty-five minute offset from Coordinated Universal Time. It is the only area that uses such an alteration.
The offset is labeled as UTC + 12:45 during winter months and UTC + 13:45 during summer months when Daylight Saving is active.

Соответственно в EEPROM карточки SprinterNet надо будет сохранять таймзону с шагом в 15 минут (четверть часа) - соответственно надо уметь представлять числа от -12 до +14 с шагом в 1/4 (см. https://www.timeanddate.com/time/map/) - можно умножить количество смещаемых часов (со знаком и с дробной частью) на 4 и в пределах байта это будет значение от -48 (#D0) до +56 (#38), причём например таймзона +13:45 (сейчас на островах Chatham т.к. у них там летнее время в данный момент) будет представлено как +55 (#37).
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Project SprinterNet

Post by Shaos »

Shaos wrote:видимо трюк в том, что это должен быть сертификат TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 128 bit keys, TLS 1.2 чтобы открываться в сафари 10-летней давности...
Сделал себе сертификат Letsencrypt :rotate:
Screenshot from 2021-02-01 03-11-24.png
https://sprinternet.io даже открывается в старом Сафари из MacOS X 10.4 на моём PowerBook G4 :lol:

P.S. Хотя официальная проверялка не может его проверить: https://www.ssllabs.com/ssltest/analyze.html?d=sprinternet.io
Assessment failed: Unable to connect to the server
P.P.S. А на другом компе проверялка сработала :kruto:

 CERTIFICATE
cert.png

You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Project SprinterNet

Post by Lavr »

Shaos wrote:хотелось бы прикрутить https:// для которого нужен сертификат ...
С этим https:// ситуация странная довольно-таки... :-?
Когда https:// вдруг появился повсеместно, я вдруг в собственную почту не мог зайти, :o
но потом нашел довольно интересный браузер:
dp.gif
Он по многим https:// заходил легко и просто, как словно https:// не существует! :roll:
Другое дело, что у него с HTML были большие траблы, но вот с https:// он на удивление
как-то умудрялся справляться!
Хотя в общем - довольно кривой браузер... :-?
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Project SprinterNet

Post by Shaos »

Интересный браузер - корнями уходит в 90е, но последняя версия выложена в 2013 году - попробую собрать в линухе

https://sourceforge.net/projects/dplus-browser/

P.S. Он от кучи либ линуксовых зависит, в том числе ssh2, nghttp2 и curl (классическая тулза, которая умеет открывать https://) - ставлю по одной, чтобы собралось...

P.P.S. Не, не собирается - какой-то затык с зависимостями в libcurl...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Project SprinterNet

Post by Lavr »

Ты знаешь, у меня сложилось вот какое впечатление о проблеме с https:// для которого нужен сертификат ...

Я поначалу просматривал всякие форумы по браузеру Опера, чтобы как-то заставить его работать,
так там излагали следующее: когда Опера 9.64 упирается в непонятный ей https://, она
выкатывает страницу своих оправданий про сертификат и шифрование, но на этом и тормозит.

Люди пишут, что в версии чуть более ранней, чем Опера 9.64 на этой страничке была заодно
и кнопочка типа: [Игнорировать и продолжить соединение] - как-то так...

Так вот мне кажется, что браузер D+ игнорирует по умолчанию: в силу своей простоты он не заморачивается
на этот повод. Если всё совсем уж плохо - он просто молча висит, но не зависает - выключить его можно.
iLavr