PDA

Просмотр полной версии : Винчестер УКНЦ



Страницы : 1 [2]

Patron
22.05.2011, 12:58
Выяснил алгоритм подсчёта CRC для HDD home block, ... в переложении на C/С++:


static DWORD GetHomeBlockChecksum(void* buffer)
{
WORD* p = (WORD*) buffer;
DWORD crc = 0;
for (int i = 0; i < 255; i++)
{
crc += (DWORD) *p;
p++;
}
crc += ((DWORD)*p) << 16;

return crc;
}

Насколько я понял - предложенная Вами функция возвращает не 32-разрядную контрольную сумму первых 254 слов блока, а инвертированный признак её корректности ( т.е. "ноль", если 32-разрядная контрольная сумма первых 254 слов совпадает со значением последних 2-х слов, рассматриваемых как 32-разрядное целое, и "не ноль" в иных случаях ).

Значение контрольной суммы вычисляет (как я понял) следующая функция:



DWORD CalculateHomeBlockChecksum(void* buffer)
{
DWORD crc = 0;

for (int i = 0; i < 254; i++)
{
crc += ( (WORD*) buffer )[i];
}
return crc * (-1);
}


Сохранённое в блоке значение контрольной суммы возвращает (если не ошибаюсь) следующая функция:



DWORD GetHomeBlockChecksum(void* buffer)
{
return ( (DWORD*) buffer )[127];
}


---------- Post added at 12:58 ---------- Previous post was at 12:25 ----------

Новая версия DSK-плагина для Total Commander (http://zx.pk.ru/showthread.php?p=223608#post223608) якобы должна работать с образами винчестеров УКНЦ.

Работа проверялась с единственным образом WDC170inv_P.img, поэтому дополнительная проверка не помешает :)

nzeemin
22.05.2011, 14:01
Patron, вы совершенно правы, простите за мою неточность.

nzeemin
23.05.2011, 16:49
Во вложении новая версия RT11DSK.
Научил новым трюкам:


rt11dsk hi <HddImage> - invert HDD image file
rt11dsk hpl <HddImage> <Partn> - list partition contents
rt11dsk hpe <HddImage> <Partn> <FileName> - extract file from the partition
rt11dsk hpa <HddImage> <Partn> <FileName> - add file to the partition

Ну то есть те же команды что для образов дискет, но при этом образ партиции не надо выдёргивать из образа жёсткого диска.

nzeemin
23.05.2011, 17:52
Кстати, нет ли RT11DSK в виде командной строки Unix ? А то PUTR не очень удобная и под DOS. Перерыл весь googlecode, не нашел исходников.

Закомментировал в stdafx.h строчку с #include <windows.h> -- получилось собрать, вот с такими добавочками:

typedef unsigned long DWORD;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef long LONG;
typedef const TCHAR* LPCTSTR;
typedef const char* LPCSTR;

Так что по идее теперь можно и под линукс попробовать собрать.
Напомню, исходники тут: http://code.google.com/p/ukncbtl/source/browse/#svn/trunk/src/rt11dsk

Vamos
23.05.2011, 19:18
PUTR еще и кривой, не хочет работать с 800 к образами

form
24.05.2011, 09:33
PUTR еще и кривой, не хочет работать с 800 к образами

Скорее всего ему нужно явно сказать организацию блоков.

А вообще замечательно самим E11 работать с образами и организацию он сам определяет - пока ни разу не ошибся. Все разборки с образами и передачу на живую машину делал исключительно из E11, пока не подводил :)

AlecV
26.05.2011, 12:38
PUTR еще и кривой, не хочет работать с 800 к образамиРаботает если монтировать диск с ключом /MSCP

The /MSCP switch means that the image is a generic disk device whose actual size should be used, instead of assuming the size matches some particular model of DEC disk drive.

т.е. PUTR тогда пересчитывает размер полей автоматом. Как правило - угадывает правильно ;)

form
26.05.2011, 12:40
Работает если монтировать диск с ключом /MSCP

The /MSCP switch means that the image is a generic disk device whose actual size should be used, instead of assuming the size matches some particular model of DEC disk drive.

т.е. PUTR тогда пересчитывает размер полей автоматом. Как правило - угадывает правильно ;)

Ну логично :)
В E11 я тоже DU использую :)
PUTR для меня непригоден ибо запустить можно только на отдельной машине или в vmware :)

form
28.05.2011, 20:03
Драйверы для RT-11 V05.07.
С поддержкой device timeout, без поддержки, с поддержкой 64 разделов (одним драйвером [не проверял]), без поддержки...

Если нет резидентной части в памяти ПП, драйвер не инсталится.

Очень тестовая версия, не решающая всех проблем, но вполне стабильно работающая если не лезть к флопу ;)

Драйвер можно использовать в старых версиях RT-11, но при этом не стоит пихать драйвер с поддержкой 64 разделов в RT-11 старее 5.6.
В RT-11 5.6 и новее драйвер будет работать независимо от поддержки extended units системой.

Patron
29.05.2011, 00:53
с поддержкой 64 разделов (одним драйвером [не проверял])Т.е. на одном винчестере УКНЦ может быть 64 раздела.

Если образ такого винчестера с этим драйвером должен работать в эмуляторе УКНЦ, то можно, наверное, сделать для тестовых целей небольшой образ с (например) 64 разделами по 400 Кб.

А если такой образ будет для тестовых целей сделан - то хотелось бы проверить, как с ним будет работать мой плагин для Total Commander.

form
29.05.2011, 06:12
Мне не удалось в эмуляторе проверить - подключаю кассету прошивки - работает, пытаюсь подключить образ диска - эмулятор падает :)

--
Problem signature:
Problem Event Name: APPCRASH
Application Name: UKNCBTL.exe
Application Version: 0.0.0.0
Application Timestamp: 4de13b25
Fault Module Name: UKNCBTL.exe
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 4de13b25
Exception Code: c0000094
Exception Offset: 0000586d
OS Version: 6.1.7601.2.1.0.256.4
Locale ID: 1049
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

nzeemin
29.05.2011, 12:57
Мне не удалось в эмуляторе проверить - подключаю кассету прошивки - работает, пытаюсь подключить образ диска - эмулятор падает :)

Выложите где-нибудь образ этого диска и скажите какой образ прошивки используете.

Vamos
29.05.2011, 13:54
PUTR для меня непригоден ибо запустить можно только на отдельной машине или в vmware
А случайно не в vmware эмулятор запускаете

form
29.05.2011, 16:20
А случайно не в vmware эмулятор запускаете

Нет, в обычном w7 x64.
Платформа Phenom II.

form
30.05.2011, 07:23
На случай если кому захочется свой драйвер делать...

Принцип такой (при загруженной резидентной части со стороны ПП):

@#144 содержит адрес обработчика прерываний (WDINT к примеру), выше этого адреса должно быть 4 слова занятых пофигу чем, 5е слово выше должно содержать адрес элемента очереди I/O (берется из WDCQE). В адрес 146 пишется 342 на чем собственно функция драйвера и заканчивается - все остальное делается на стороне ПП, по окончанию вызывается прерывание (при этом приоритет процессора глубоко пофигу, а если есть какие прерывания в очереди - они слетят ибо прерывание эмулируется временной пересадкой адреса в @#24 и эмуляцией сбоя питания). Байт @#146 при этом будет содержать 0 (успешное завершение) или 1 (ошибка).

Обработчик со стороны ПП отрабатывает чтение, запись и SPFUN #373 (вернуть размер устройства). При этом номер устройства вроде (детально не всматривался) передается в поле Q$UNIT целиком, а код функции - в чистом виде в поле Q$FUNC. Для номеров устройств больше 7 это не совпадает со способом, используемым в RT-11 - нужно руками преобразовать к данному виду.

в общем случае примерно так:


.BLKW 1 ;СЮДА ПИШЕТСЯ АДРЕС ЭЛЕМЕНТА ОЧЕРЕДИ
.BLKW 3 ;3 СЛОВА ПРОПУСКА

;В ЭТОМ МЕСТЕ НЕЯВНО НАХОДИТСЯ 'RETURN' ИЛИ 'BR' (ЕСЛИ УКАЗАТЬ ТРЕТИЙ АРГУМЕНТ
;В .DRAST

.DRAST WD,4
MOV WDCQE,R4 ;R4 -> АДРЕС ЭЛЕМЕНТА ОЧЕРЕДИ
BISB @#146,@-(R4) ;УСТАНАВЛИВАЕМ СТАТУС В CSW
.DRFIN WD ;ЗАВЕРШАЕМ I/O


В оригинале после .DRBEG делается отступ на одно слово назад и пишется команда "MOV #342,@#146" после которой делается "RETURN". В этом случае если сразу после RETURN идет .DRAST, слово WDCQE придется как раз в то место которого ожидает обработчик в ПП, однако такая конструкция будет работать только в мониторе без поддержки device timeout.

---------- Post added at 10:23 ---------- Previous post was at 10:09 ----------

И для ручного выполнения I/O например из отладчика, что '@' нам рисует...
Формат элемента очереди, используемый резидентной частью:


оффсет размер назначение
+0 слово номер блока
+2 байт код SPFUN или 0 для чтения/записи
+3 байт номер устройства
+4 слово адрес буфера
+6 слово количество слов (со знаком минус для записи)

form
30.05.2011, 09:31
Т.е. на одном винчестере УКНЦ может быть 64 раздела.

Если образ такого винчестера с этим драйвером должен работать в эмуляторе УКНЦ, то можно, наверное, сделать для тестовых целей небольшой образ с (например) 64 разделами по 400 Кб.

Сколько там разделов может быть и как они организованы - не смотрел. Просто 77 (63.) - максимальный номер устройства в RT-11 5.6/5.7. Для ранних систем - 7. В стандартных драйверах (DU) разделами считается простое деление диска на куски по 65535 блоков, но здесь как я понял принцип все-таки другой :)

nzeemin
09.06.2011, 18:46
Реализовал IDE-команду 0xec IDENTIFY DRIVE. Не знаю насколько правильно, но во всяком случае WDX её вызывает и показывает адекватный результат:

http://img-fotki.yandex.ru/get/4408/nzeemin.6/0_59869_455ff68c_orig

Во вложении свежий exe.

UPD: http://ukncbtl.googlecode.com/files/UKNCBTL-beta20.zip

form
10.06.2011, 05:27
Ура! Подцепил образ диска без падений :)

falanger
10.06.2011, 20:35
Где можно взять монтажную и принципиальную схему новой версии контроллера от dk_spb в удобосмотребельном виде jpg или gif?
А то по найденным фоткам собранных контроллеров микросхемы на платах расставил и запаял, а вот с резисторами и прочей мелочью завис.

nzeemin
11.06.2011, 11:15
По инструкции Арсения имея КНЖМД можно подготовить винчестер к работе, используя дискету SYS1002_2.DSK. По идее, то же самое можно сделать не имея дисковода, с помощью эмулятора:
1. Создаём пустой образ диска в точности нужного размера
2. В первые два байта помещаем numsectors и numheads
3. Подставляем образ в эмулятор. Дальше по инструкции -- WDX итд.
4. Образ с подготовленным home-блоком и как минимум одним рабочим разделом копируем 1:1 на реальный винчестер. Не забываем инвертировать, если нужно.

SKcorp.
11.06.2011, 22:03
Инвертировал битики, перезалил, вот:
WDC170INV.ZIP (http://narod.ru/disk/18459482000/WDC170INV.ZIP.html)[COLOR="Silver"]



Перезалейте, плиз, а то "Закончился срок хранения файла. Файл удален с сервиса."

PS: А у УКНЦБТЛ какие системные требования? А то тормозит очень.

Titus
11.06.2011, 22:17
PS: А у УКНЦБТЛ какие системные требования? А то тормозит очень.
Большие требования. У меня на CoreDuo 1.6Ггц дает только 50% скорости примерно.

Vamos
11.06.2011, 22:39
SKcorp., там уже и таблица разделов исправлена

http://narod.ru/disk/15697408001/WDC170inv_P.rar.html

---------- Post added at 22:39 ---------- Previous post was at 22:35 ----------

У меня на Р2 300 Мгц да подтормаживает, в основном ввод с клавиатуры.
на целероне 1,8 Ггц нормально.

BYTEMAN
12.06.2011, 00:58
Целерон 2.4 1 ядро полёт нормальный.

falanger
12.06.2011, 05:10
Кто собирал контроллеры IDE - имейте совесть! Дайте нормальную схему удобочитаемю в jpg а лучше фотку собранной платы с подписанными номиналами для резисторов-конденсаторов!
А то расставил микрухи по фото и резисторную матрицу впаял, а дальше завис.

falanger
12.06.2011, 19:21
Коллеге form-у огромное спасибо за присланную фотографию КНЖМД УКНЦ с подписанными конденсаторами и резисторами, благодаря ему смог дособрать оба контроллера. Осталось дождаться теперь пока приедут УКНЦ.

dk_spb
13.06.2011, 15:58
Дайте нормальную схему удобочитаемю в jpg а

А чем схема в .png не устраивает????

falanger
13.06.2011, 17:44
dk_spb, тем что не смог найти.
По идее бы как tnt23 надо бы сделать страничку с фотками и схемами и повесить ссылку на неё в начале темы. Тогда собирать контроллер будет намного проще. По фото расставил ИМС, и по подписям на нём-же или схеме расставил резисторы и конденсаторы.
Хотя лучше на фото подписать мелочевку согласно её маркировке. Чтобы не выяснять что значит надпись на конденсаторе "104" или "751" или где какой резистор стоит...
Говорю как человек сидевший на заводе на конвейере на набивке плат.
Если же расставлять "только согласно схеме" то возни будет в несколько раз больше,

dk_spb
13.06.2011, 18:02
falanger, Да я согласен про страничку, только со временем вообще жесткач.

Vit Skystranger
13.06.2011, 22:18
Коллеге form-у огромное спасибо за присланную фотографию КНЖМД УКНЦ с подписанными конденсаторами и резисторами, благодаря ему смог дособрать оба контроллера. Осталось дождаться теперь пока приедут УКНЦ.

А можно здесь выложить это фото?

falanger
14.06.2011, 04:49
Вот оно.
http://i048.radikal.ru/1106/6e/1d88029d20det.jpg (http://radikal.ru/F/i048.radikal.ru/1106/6e/1d88029d20de.jpg.html)
Те которые конденсаторы подписаны 0,1u - это те из набора для сборки от dk_spb что подписаны "104", в том числе и кондёр под проводами, два оставшихся - "751".
А с резисторами и так понятно.

AlecV
17.06.2011, 12:19
Коллеги, а есть исходники ПЗУ новее чем тут ?

http://pdp-11.ru/UKNC/Suvorov/index.htm

В файле wdboot.rar (внутри hdd.rar) - исходники драйверов, ПЗУ, утилиты wdx и скрипты для сборки. Причем wdx.c - на каком-то С, что за компилятор ??

UPD Ага, уже увидел, обсуждение в этой же теме ранее

http://zx.pk.ru/showpost.php?p=262509&postcount=42

olegh
28.06.2011, 09:51
Господа хорошие,
Благодаря dk_spb, который мне сподобился прислать плату УК-НЦ, я запустил машину после ~14летнего перерыва. Полез смотреть на исходники, что у меня есть.

Что найдено:
1. WDX/WDXR - версия 1.15. Разницы с 1.14 не помню, но думаю, небольшая.
2. WDBOOT (резидент) - v1.10 - как я понимаю, у вас такая же.

3. Копая драйвер и WDBOOT, со скрипом мозга вспомнил про интересный механизм,
который я приделал к своему драйверу винчестера. Поделюсь им тут.

Итак, есть проблема: кое-какие старые игрушки для УК-НЦ написаны через одно место, не захватывают память в ПП, а сразу копируют свой резидент в верхние адреса доступной памяти, не глядя, есть ли там чего, или нет.
То есть они думают "я тут один, самый первый, значится, память свободна"
Если там уже находятся другие резидентные программы, которые взяли память корректным способом, то естественно, получается полный швах - эти игрушки перетирают собою всё, что можно. Естественно, под раздачу попадает в первую очередь резидент винчестера.
Чтоб забороть этот глюк, в firmware вставлен следующий хак:
В мастер-блок диска (где геометрия, партиции и тп) по смещению 0126 лежит 0.
Если туда положить N > 0, то перед захватом куска памяти для резидента винчестера,
будет захвачен ещё один - просто кусок памяти в верхних адресах, размером N байт.
А сам резидент винчестера, и корректные программы, которые сажают свои резиденты, разместятся уже ниже этого буфера-пустышки.

Потом, когда система загружена, и все другие резиденты установлены, можно сказать "Set WD: Free".
Драйвер освободит захваченый кусок памяти в верхних адресах.

В результате, место в верхних адресах будет свободно, и некорректные игрушки
будут работать, и не убивать нормальных резидентов.

Сразу скажу, что я не помню, что за игрушки - были в каких-то школьных пакетах,
и с довольно неплохой графикой.

form
04.08.2011, 21:39
Обновление драйвера.
Поправлены ошибки, проверена работа с 64 устройствами.

В наборе:

WD.SYS - простой драйвер
WD64.SYS - с поддержкой 64 устройств
WDTM.SYS - простой с поддержкой device timeout
WD64TM.SYS - с поддержкой 64 устройств и device timeout

При обращении к номерам устройств больше 7 используется однобуквенный синтакс (W10-W77).

Драйвер по прежнему предназначен для загрузки с него. При загрузке с дискеты для доступа к винчестеру нужно запустить программу WDR (из обычного набора для работы с винтом) и сделать INS WD.

Допускается использование драйвера с поддержкой 64 устройств в системе без поддержки.

hantarex
08.10.2011, 12:43
господа, не могли бы вы перезалить WDC170inv_P.img? на народе он уже не доступен:(
спасибо.

VNN_KCS
08.10.2011, 13:41
palsw загляни в личку.

Vamos
13.10.2011, 01:10
hantarex, http://narod.ru/disk/28238529001/WDC170inv_P.rar.html

hantarex
13.10.2011, 19:11
Vamos большое спасибо! софта на винтах немало:) но работает только с ide_hdbootv0400, с ide_wdromv0110 не фурычит:( я что-то упустил?

Arseny
13.10.2011, 21:56
Vamos большое спасибо! софта на винтах немало:) но работает только с ide_hdbootv0400, с ide_wdromv0110 не фурычит:( я что-то упустил?
Не то, что бы упустил ... Диск, с которого снят образ, шел с контроллером от "Электронных работ" и на нем есть только их драйвер - ID.SYS

hantarex
13.10.2011, 22:04
а образ для WD-контроллера есть? не могли бы перезалить?

Vamos
13.10.2011, 22:05
я что-то упустил?
Да. Почитайте эту ветку форума.

hantarex
13.10.2011, 22:06
и общий вопрос - который драйвер "круче"? ID или WD? пытаюсь собрать одну железяку, что лучше в нее засунуть?

Arseny
13.10.2011, 23:18
а образ для WD-контроллера есть? не могли бы перезалить?
А зачем? Цепляешь вместо второй ПЗУ ide_wdromv0110 и делаешь к ней диск. Инструкцию как сделать бутовый винт (если не в курсе) берешь на сайте УКНЦ&PDP-11. РОМы не очень совместимы на уровне загрузчика, а в остальном все ОК.

---------- Post added at 23:16 ---------- Previous post was at 23:14 ----------


и общий вопрос - который драйвер "круче"? ID или WD? пытаюсь собрать одну железяку, что лучше в нее засунуть?
WD - это переработанный и дополненный ID. Причем - разработчиков ID ты уже врядли найдешь, а для WD доступны и исходники, и автор.

---------- Post added at 23:18 ---------- Previous post was at 23:16 ----------


пытаюсь собрать одну железяку, что лучше в нее засунуть?Может сразу на нормальном контроллере делать? А с дровами помогут - просто попроси спецов.

hantarex
14.10.2011, 00:01
Может сразу на нормальном контроллере делать? А с дровами помогут - просто попроси спецов.

это и будет эмулятор IDE на SD-карте. еще вопрос - с эмулятором идут образы rom, код - первые 4кб, вроде неинверсный. если его запихивать в одну 16-бит ПЗУ - какие-то дополнительные телодвижения нужны? (инвертирование, или еще что-нить)?

будет один микроконтроллер, эмулирующий при старте кассету ПЗУ, а потом работающий как регистры HDD. с rom'ами что-нить, кроме обрезки, делать надо?

Arseny
14.10.2011, 00:15
это и будет эмулятор IDE на SD-карте. еще вопрос - с эмулятором идут образы rom, код - первые 4кб, вроде неинверсный. если его запихивать в одну 16-бит ПЗУ - какие-то дополнительные телодвижения нужны? (инвертирование, или еще что-нить)?

будет один микроконтроллер, эмулирующий при старте кассету ПЗУ, а потом работающий как регистры HDD. с rom'ами что-нить, кроме обрезки, делать надо?
По моему, следует все-таки последовать совету Vamos и прочитать таки ветку - тут уже описано как считывается ПЗУ, что откуда берется и зачем инвертируется. Просто в 2-х словах не объяснишь, а переписывать ветку (или несколько) форума смысла нет.

hantarex
14.10.2011, 16:24
вопрос по схеме контроллера винта - не пойму, как работает дешифратор адреса? при активном CE0 выбирается ПЗУ, при CE3 - регистры винта? или как-то иначе?

и к какому сигналу привязывается CE0? к спаду SYNC? или к выставлению адреса?

Alex_K
16.10.2011, 11:14
вопрос по схеме контроллера винта - не пойму, как работает дешифратор адреса? при активном CE0 выбирается ПЗУ, при CE3 - регистры винта? или как-то иначе?

и к какому сигналу привязывается CE0? к спаду SYNC? или к выставлению адреса?
hantarex, для начала ознакомьтесь с работой шины QBUS, она же наша советская МПИ. Теперь по сигналам. CE0 - сигнал разрешения работы системного ПЗУ в диапазоне 100000-117777, если он стоит, то ПЗУ разрешена, иначе запрещена. Т.к. МПИ инверсная, то "электрически" при запрещенном ПЗУ там будет единица. Такая же история и с CE3, только этот сигнал используется для выбора слота (1 или 2). Соответственно так как контроллер работает в окне "100000-117777", то он активируется при запрещенном СПЗУ (CE0=0, "электрически" 1), выбранном слоте (CE3), адрес входит в "окно" (A15-A13=100, "электрически" 011). Адрес естественно защелкивается по спаду SYNC. Сигналы CE0 и CE3 не защелкиваются, они все время на разъеме. А линией A12(защелкнутой) уже выбирается или ПЗУ (адреса 100000-107777), или регистры винчестера (110000-117777).

hantarex
16.10.2011, 11:33
Alex_K большое спасибо за информацию! не дадите ссылочку на адекватное описание МПИ? а то по моим описаниям SYNC активен на весь цикл обмена, а разделение адрес-данные происходит по фронтам DIN или DOUT :(

form
16.10.2011, 11:41
Alex_K большое спасибо за информацию! не дадите ссылочку на адекватное описание МПИ? а то по моим описаниям SYNC активен на весь цикл обмена, а разделение адрес-данные происходит по фронтам DIN или DOUT :(

Берется описание любого подходящего проца на bitsavers, там все есть в наглядном виде. Названия сигналов только надо будет сопоставить, но это не сложно.

KDJ11-B (http://bitsavers.trailing-edge.com/pdf/dec/pdp11/1173/EK-KDJ1B-UG_KDJ11-B_Nov86.pdf) подойдет.

Alex_K
16.10.2011, 11:45
Alex_K большое спасибо за информацию! не дадите ссылочку на адекватное описание МПИ? а то по моим описаниям SYNC активен на весь цикл обмена, а разделение адрес-данные происходит по фронтам DIN или DOUT :(

В описании все верно - сначала выставляется адрес (электрически он инверсный). Затем по спаду SYNC этот адрес защелкивается во внутренних регистрах контроллера. Через некоторое время на линии адрес-данные выставляются данные и потом сигнал DOUT или эти линии переходят у процессора в режим входов и выставляется сигнал DIN. Внешнее устройство отработав, выставляет сигнал RPLY (спад сигнала). Получив RPLY процессор снимает DIN/DOUT. Вслед за этим устройство должно снять RPLY, а процессор SYNC. Так что SYNC действительно активен во время всего обмена, он служит не только защелкой адреса, но и индикатором адресного обмена, т.к. бывают еще процедуры чтения вектора прерывания, а у 1801ВМ2 есть еще чтение безадресного регистра.

А по литературке - поищите книгу Захарова "Электроника-60", доку на 1806ВМ2, там все это описано.

hantarex
16.10.2011, 11:54
спасибо господа!:) пойду читать.

form
16.10.2011, 12:33
На случай если кому захочется побаловаться, исходник драйвера, работающего в RT-11 V05.05 и новее. Мне лень дальше ковыряться :)

Использует библиотеку SYSTEM от последних версий RT-11. Собирать в RT-11 V5.6/5.7. SETов нет. Оптимизации нет. Подгрузки кода в ПП нет.

Для системы с поддержкой device timeout раскоментировать TIM$IT=1.
Для поддержки 64 устройств одним драйвером раскоментировать UNI$64=1 (драйвер будет работать и в системах без поддержки 64 устройств).

Сборка:


.MAC WD

.LIN/EXE:WD.SYS/NOBI WD/BOU:1000
Boundary section? SETOVR


Не помню точно последний это вариант или нет. Лень УКНЦу собирать :)

hantarex
16.10.2011, 21:07
еще вопрос: для шины МПИ сигнал RPLY выставляется не позднее 10мкс после активации SYNC. МПИ асинхронная шина, к тактовой частоте процессора не привязана. для УКНЦ есть данные по таймингу? или как их можно расчитать?

интересует максимально допустимое время между сигналами.

Alex_K
16.10.2011, 22:28
еще вопрос: для шины МПИ сигнал RPLY выставляется не позднее 10мкс после активации SYNC. МПИ асинхронная шина, к тактовой частоте процессора не привязана. для УКНЦ есть данные по таймингу? или как их можно расчитать?

интересует максимально допустимое время между сигналами.
Сигнал RPLY выставляется после сигналов DIN/DOUT не позднее чем через 64 такта процессора (для 1801). Если не появился за 64T - то тогда прерывание по зависанию. Этот сигнал является ответом процессору, что данные считаны/записаны внешним устройством.

Titus
16.10.2011, 22:48
Сигнал RPLY выставляется после сигналов DIN/DOUT не позднее чем через 64 такта процессора (для 1801). Если не появился за 64T - то тогда прерывание по зависанию. Этот сигнал является ответом процессору, что данные считаны/записаны внешним устройством.
На ВМ2 это 128Т вроде.

hantarex
16.10.2011, 23:17
тактовая частота ПП 6 Мгц, тогда (1/6Мгц)*64 приблизительно равно 7мкс?. а каково макс. время между выставлением SYNC и DIN,DOUT?

в доках на Электронику-60 время между выставлением адреса и выставлением SYNC макс.=150нс. это для шины процессора. для МПИ действуют те же тайминги?

это я к тому, что пытаюсь сделать программный дешифратор шины МПИ. пока не знаю, хватит ли скорости выбранного микроконтроллера.

Alex_K
16.10.2011, 23:50
На ВМ2 это 128Т вроде.
А откуда такие данные ?

Titus
16.10.2011, 23:55
А откуда такие данные ?
Сам потестируй. А вообще - в доках сказано было.

Alex_K
17.10.2011, 00:03
Сам потестируй. А вообще - в доках сказано было.
А что за документация?

Titus
17.10.2011, 00:08
А что за документация?
Посмотрю. Если что, скажу.

Alex_K
17.10.2011, 00:17
Посмотрю. Если что, скажу.
Говорить не надо, надо сканировать и выкладывать.

hantarex
17.10.2011, 12:53
нашел очень любопытный документ:) качество не ахти, но кое-что разобрать можно:)

http://www.complexdoc.ru/scan/ГОСТ%2026765.51-86

Patron
17.10.2011, 20:50
нашел очень любопытный документ:) качество не ахти, но кое-что разобрать можно:)Если после прочтения данного документа не вывалились глаза - можно продолжить чтение оригинальным сканом стандарта Q-Bus фирмы DEC:

DEC STD 160: LSI-11 Bus Specification (http://bitsavers.org/pdf/dec/standards/EL-00160-00-0_A_DEC_STD_160_LSI-11_Bus_Specification_Sep91.pdf).

AlecV
17.10.2011, 23:32
Я выжимку выложил на Википедию

http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D 1%8C%D0%BD%D1%8B%D0%B9_%D0%BF%D0%B0%D1%80%D0%B0%D0 %BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0% B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81

Правда какой-то добрый человек поправил (начиная с "Общность...") жутким канцеляритом.

form
17.10.2011, 23:42
Я выжимку выложил на Википедию

http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D 1%8C%D0%BD%D1%8B%D0%B9_%D0%BF%D0%B0%D1%80%D0%B0%D0 %BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0% B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81

Правда какой-то добрый человек поправил (начиная с "Общность...") жутким канцеляритом.


REG РГН РГН Регенерация памяти

По ихнему обычно называется REF.


DMGO ППД РЗМ Предоставление прямого доступа (разрешение захвата магистрали)

IAKN ППР ПРР Предоставление (разрешение) прерываний

Выше написано, что речь идет о контактах. В этом случае лучше описать как входящие так и уходящие сигналы: IAKI, IAKO, DMGI, DMGO.

AlecV
18.10.2011, 00:37
form, Спасибо за отзыв! Я подумаю как сформулировать и добавлю.

hobot
21.10.2011, 23:47
Вопрос! Только у меня в эмуляторе при загрузке с ID5 глюки с клавиатурой?
На реальной машине, что то же так работает? Как победить?

Alex_K
22.10.2011, 00:08
Вопрос! Только у меня в эмуляторе при загрузке с ID5 глюки с клавиатурой?
На реальной машине, что то же так работает? Как победить?
А какие глюки? Если это образ WDC170, то там же ID5 - No boot on volume, т.е. он не загрузочный.

hobot
22.10.2011, 00:39
Alex_K, я поправил, сделайте сами, скопируйте туда id.sys и выполните стандартный copy/boot для id5 и загрузка пойдёт, там пакет от Зеленоградцев
обучающий (609 школа) графическая разработка, требующая в памяти некий UKLOAD,
так вот там алфавитная клавиша R не пинькает ??? просто интересно было бы понять, монитор\загрузчик виноват или эмулятор???

могу конечно выложить img с поправленной уже загрузкой, просто элементарные действия и похоже загрузку просто убили из-за как раз какого-нибудь такого глюка ???

Alex_K
22.10.2011, 00:47
Alex_K, я поправил, сделайте сами, скопируйте туда id.sys и выполните стандартный copy/boot для id5 и загрузка пойдёт, там пакет от Зеленоградцев
обучающий (609 школа) графическая разработка, требующая в памяти некий UKLOAD,
так вот там алфавитная клавиша R не пинькает ??? просто интересно было бы понять, монитор\загрузчик виноват или эмулятор???

могу конечно выложить img с поправленной уже загрузкой, просто элементарные действия и похоже загрузку просто убили из-за как раз какого-нибудь такого глюка ???
Какой-то глюк с SL.SYS. После выгрузки по SET SL OFF всё работает.

hobot
22.10.2011, 00:53
Какой-то глюк с SL.SYS. После выгрузки по SET SL OFF всё работает.
тогда попробую только этот драйвер заменить на другой? сейчас проверю 2 минуты

---------- Post added at 00:53 ---------- Previous post was at 00:52 ----------

Да! Лечится заменой sl.sys на любой другой - похоже битый какой-то или версия неправильная, в общем не в эмуляторе дело!

Alex_K
22.10.2011, 00:57
Ещё можно войти в режим назначения клавиш по SET SL LET, ввести R=R, затем выйти по УПР+С(Ц). Всё работает. Там кстати SL.SYS древний, ещё даже шестой версии.

hobot
22.10.2011, 01:08
Там кстати SL.SYS древний, ещё даже шестой версии.
Да, там много из старого чего, но вот UKLOAD как загружать или я не помню, но просто запуск .sav файла не проходит.
Имидж с возможностью загрузки с id5 и поправленным sl.sys
[ссылка истекла - удалил] - образ диска доступен в архиве софта в папке ukncbtl_hdd.

Alex_K
22.10.2011, 10:20
Да, там много из старого чего, но вот UKLOAD как загружать или я не помню, но просто запуск .sav файла не проходит.Здесь и не будет проходить. UKLOAD думает, что она единственная и неповторимая в памяти ПП. Поэтому она сначала освобождает всю память ПП, далее естественно загружается сначала, затирая при этом все резиденты, которые были загружены ранее. В данном случае затирается драйвер винчестера, сидящий в памяти ПП. Поэтому UKLOAD надо запускать только с дискетки, с которой также в память ПП ничего не грузится.

Titus
22.10.2011, 13:32
Здесь и не будет проходить. UKLOAD думает, что она единственная и неповторимая в памяти ПП. Поэтому она сначала освобождает всю память ПП, далее естественно загружается сначала, затирая при этом все резиденты, которые были загружены ранее.
А эта UKLOAD что делает?

Alex_K
22.10.2011, 14:58
А эта UKLOAD что делает?
Дизассемблируйте, узнаете. Мне, честно говоря, копаться в 30 блоках неохота. Объем слишком большой.
Есть много команд, которые работают с регистрами адреса/данных (177010, 177012, 177014), а также со спрайтовым механизмом (177016 - 177024).

Titus
22.10.2011, 15:44
Дизассемблируйте, узнаете. Мне, честно говоря, копаться в 30 блоках неохота. Объем слишком большой.
Есть много команд, которые работают с регистрами адреса/данных (177010, 177012, 177014), а также со спрайтовым механизмом (177016 - 177024).
Нет, а в общих чертах не известно?

hobot
23.10.2011, 00:16
Нет, а в общих чертах не известно?
Известно =) В целом, когда встала задача учебное ПО для УКНЦ ваять (коммерческий заказ от образования - возможно с самого верху был! "смайл") выяснилось, что работать с графикой напрямую ( графики функции - алгебра, геометрия и пр. фигурки для наглядности процессов) - может ограниченное число действительно продвинутых профи, а новых надо или долго долго учить или дать им (позволило привлечь к разработке самих школьников например) движок, что-бы использовали. Бейсик под эти цели по понятным причинам не годился - нужен был пакет исполняемых программ. Решений было предложено несколько и одним из них было использование UKLOAD - к этой штуке прилагалась (ну примерно так) библиотека с готовыми процедурами для графики и работы с палитрами, страницами и пр., но программы использующие нуждаются что-бы предварительно в памяти уже сидел UKLOAD - не самое удачное решение, но были и другие. А профи всё равно писали своё, на ID5 я так понимаю сам пакет от разраб.
:redface:

_____________
Titus, мне вот интереснее что прячется в не читаемом work.dsk на id0 ?:confused_std:

Mad Killer/PG
08.01.2012, 14:22
Ура ,свершилось чудо этой ночью,нет не явление народу святого,а осилил спаять контроллер уже последний с набора dk_spb за что ему ещё раз большое спасибо,такую красоту паять одно удовольствие просто:)
Также была увидена заветная надпись - Oleg H :)
Дальше значит написано(могу ошибаться по композиту так фигово видно было что капец,ещё ночью глаза слипались) так -
Кто сделал,версия 1.10,
WRAM ошибка контрольной суммы
WRAM резидент успешно загружен

Выберите ххххх-хххх-хххх (0-7)1 ?

И на этом всё(-подвисон.Подключал через переходник Компакт Флешку,также через переходник винт от ноута маленький.

Может форматировать как-то надо по особенному,или залить туда на винт чем-то полный образ чужого винта заведомо рабочего?

Извиняйте за плохие вопросы -был тяжолый день,потом ночь УКНЦ:),ещё не спал -сори...

olegh
18.01.2012, 23:30
Нужно разметить диск программой WDX.

Вот тут внизу страницы - инструкция и программы.

http://uknc.narod.ru/Suvorov/index.htm

Mad Killer/PG
19.01.2012, 00:12
Пока ничего не делаю,умерла флешка юсб которая служит проводником с моего компа(который тоже пока без видяхи) на старый пц где винда 98 и стоит 5.25 дюймовый дисковод,как только прикуплю флешку сразу продолжу эксперименты.

Спасибо,меня раздувает куча гордости когда-то пару год назад я мечтал просто найти УКНЦ,теперь же есть и УКНЦ и контроллер дисководов,а теперь ещё и винчестер,честно сказать два года назад,посчитал бы это стечение обстоятельств фантастикой...

Спасибо всем учасникам нашего сообщества!!!

hobot
24.04.2012, 20:07
И так попорядку) У меня такая проблема с хардом в эмуляторе - один из разделов стал ругаться на переполнение ? как победить?
Взял образ диска form'a - там столько же сегментов в каждом разделе (каталог начинается с 68 блока ) но разделов 20 штук !!! WD драйвер не видит например WD10 ? Как разобраться?
При таком раскладе (68) правильно ли я понимаю что количество сегментов в директории =31? И если 71*31 это же огого сколько файлов?
А у меня их там всего 213 ? Так можно ли как-то продолжить использовать образ харда где всего 012345-разделов и как победить "переполнение" ?


?MON-F-Directory overflow 141110

Спасибо.
:confused_std:

Arseny
24.04.2012, 20:31
Тебе нужно SQUEEZE - сборка-сжатие. Даешь команду SQ WD0: и она соберет все файлы подряд др. за др. Аналог дефрагментации.

hobot
24.04.2012, 21:15
После сжатия результат тот же :
Загрузился с другого раздела, и сделал sq для "переполненого" вроде залетало?

---------- Post added at 20:51 ---------- Previous post was at 20:51 ----------

В чём ошибка то могла быть? И почему сжатие из под загрузчика на проблемном разделе не спасало?

---------- Post added at 20:54 ---------- Previous post was at 20:51 ----------

Да и на будущее например может переинициализировать все разделы с максимальным кол-вом сегментов? Это улучшит ситуацию? Что бы не озадачиваться этим больше?

---------- Post added at 21:15 ---------- Previous post was at 20:54 ----------

Проверил ещё раз вроде не ругается после sq )
Arseny, good! Буду дальше мучить тут всякие файлики )

Arseny
24.04.2012, 21:16
Это не лечится. RT-11 пишет файлы на любое свободное место достаточного размера. Файлы пишутся ТОЛЬКО целиком.

hobot
24.04.2012, 21:40
Это не лечится. RT-11 пишет файлы на любое свободное место достаточного размера. Файлы пишутся ТОЛЬКО целиком.

Понял, вот будет засада если загрузчика "соседнего" не будет, с раздела при такой ошибке не получается sq саму себя - не проходит (((

Arseny
24.04.2012, 22:51
вообще-то должен. почему не получилось - х.е.з.

зы: может ему места для переноса хотя бы одного файла не хватало?

hobot
24.04.2012, 23:26
ы: может ему места для переноса хотя бы одного файла не хватало?
да там места пол раздела ))) Мы же о харде говорим ))) Не проходит - означает вылет в <@@@СТОП@@@> !

---------- Post added at 23:26 ---------- Previous post was at 23:23 ----------

И повторюсь там свободная зона была перед самой последней через несколько файлов, то есть ей sqвавить (сжимать) надо было три четыре файла самых последних
в каталоге, в начале и в центре там пустых мест не было ))) на момент ошибки.
Но сейчас работает и ладушки! Главное держать соседний раздел бутабельным )))
И дискеты (!) Если про реальное железо говорить могут помочь если что )))

shattered
05.09.2016, 00:52
При загрузке ПЗУшкой от "Электронных работ" (трасса записи в порты винчестера):

HDD Write 1f4 <-- 0xffff
HDD Write 1f4 <-- 0xff00
HDD Write 1f4 <-- 0xffff
HDD Write 1f4 <-- 0xff00
HDD Write 1f6 <-- 0xff00
HDD Write 1f5 <-- 0xff00
HDD Write 1f4 <-- 0xff00
HDD Write 1f3 <-- 0xff01
HDD Write 1f2 <-- 0xff01
HDD Write 1f7 <-- 0x0020
HDD COMMAND 20 (READ MULT): C=0, H=0, SN=1, SC=1
HDD Write 1f2 <-- 0xf522
HDD Write 1f6 <-- 0x0009
HDD Read sector complete
HDD Write 1f7 <-- 0x0091
HDD COMMAND 91 (SET CONFIG): H=9, SC=33

Вот здесь непонятка -- получается что сначала задаются параметры следующей команды, но затем завершается передача сектора, что приводит к декременту sector_count (SC, порт 1F2). В результате команда 91h получает параметр SC=33, что конечно неверно и в дальнейшем приводит к ошибкам позиционирования.
Либо я тут неправильно понимаю логику SC и он должен уменьшаться до завершения передачи данных сектора -- но неясно в какой момент.
<...>
UPD: В общем, сделал пока декремент счётчика непосредственно перед началом чтения -- вроде как работает.


наступил на эти же грабли, делая эмуляцию этих контроллеров в MAME. эмуляция ATA/IDE как таковая там уже есть, но пока не стыкуется с УКНЦ :)



[:ide] 2.453573 at ':subcpu' (26102): IDE W [:ide] 1f4 <- 0000 (ffff) & 177777
[:ide] 2.453576 at ':subcpu' (26104): IDE R [:ide] 1f4 == 00ff (ff00)
[:ide] 2.453583 at ':subcpu' (26112): IDE W [:ide] 1f4 <- 00ff (ff00) & 177777
[:ide] 2.453586 at ':subcpu' (26114): IDE R [:ide] 1f4 == 0000 (ffff)
[:ide] 2.486194 at ':subcpu' (26102): IDE W [:ide] 1f4 <- 0000 (ffff) & 177777
[:ide] 2.486196 at ':subcpu' (26104): IDE R [:ide] 1f4 == 00ff (ff00)
[:ide] 2.486204 at ':subcpu' (26112): IDE W [:ide] 1f4 <- 00ff (ff00) & 177777
[:ide] 2.486207 at ':subcpu' (26114): IDE R [:ide] 1f4 == 0000 (ffff)
[:ide] 2.486246 at ':subcpu' (25404): IDE R [:ide] 1f7 == 0052 (ffad)
[:ide] 2.486249 at ':subcpu' (25406): IDE R [:ide] 1f7 == 0050 (ffaf)
[:ide] 2.486257 at ':subcpu' (25416): IDE W [:ide] 1f6 <- 00ff (ff00) & 177777
[:ide] 2.486261 at ':subcpu' (25420): IDE W [:ide] 1f5 <- 00ff (ff00) & 177777
[:ide] 2.486264 at ':subcpu' (25422): IDE W [:ide] 1f4 <- 00ff (ff00) & 177777
[:ide] 2.486269 at ':subcpu' (25426): IDE W [:ide] 1f3 <- 00fe (ff01) & 177777
[:ide] 2.486273 at ':subcpu' (25430): IDE W [:ide] 1f2 <- 00fe (ff01) & 177777
[:ide] 2.486276 at ':subcpu' (25432): IDE R [:ide] 1f1 == 0001 (fffe)
[:ide] 2.486283 at ':subcpu' (25442): IDE W [:ide] 1f7 <- ffdf (0020) & 177777
[:ide:ide:0:hdd] IDE Read multiple: C=0 H=0 S=1 LBA=0 count=1
[:ide] 2.486286 at ':subcpu' (25444): IDE R [:ide] 1f7 == 00d0 (ff2f)
[:ide] 2.486291 at ':subcpu' (25444): IDE R [:ide] 1f7 == 0058 (ffa7)
[:ide] 2.486296 at ':subcpu' (25452): IDE R [:ide] 1f7 == 0058 (ffa7)
[:ide] 2.486310 at ':subcpu' (25534): IDE R [:ide] 1f0 == 0a22 (f5dd)
[:ide] 2.486326 at ':subcpu' (25552): IDE W [:ide] 1f2 <- 0add (f522) & 177777
[:ide:ide:0:hdd] ':subcpu' (25552): :ide:ide:0:hdd dev 0 write_cs0 0002 0022 00ff ignored (DRQ) command 20
[:ide] 2.486338 at ':subcpu' (25566): IDE W [:ide] 1f6 <- fff6 (0009) & 177777
[:ide:ide:0:hdd] ':subcpu' (25566): :ide:ide:0:hdd dev 0 write_cs0 0006 0009 00ff ignored (DRQ) command 20
<...>
[:ide] 2.490648 at ':subcpu' (25736): IDE W [:ide] 1f7 <- ff6e (0091) & 177777
[:ide:ide:0:hdd] IDE Set configuration (1 heads, 0 sectors)


в результате видим:

https://img-fotki.yandex.ru/get/53993/264743.5/0_b4ac0_f1360695_orig.png (https://fotki.yandex.ru/next/users/shattered/album/137130/view/740032)

P.S. ссылку на образ оказалось не так просто найти -- http://archive.pdp-11.org.ru/EMULATORS/UKNCBTL_HDD/uknc_hdd_wd/ukncbtl_hdd_wd.rar

Alex_K
05.09.2016, 13:54
наступил на эти же грабли, делая эмуляцию этих контроллеров в MAME. эмуляция ATA/IDE как таковая там уже есть, но пока не стыкуется с УКНЦ
Ну там немного другие грабли были - ошибка при переходе на другую дорожку, почитайте внимательно. А здесь почему-то не воспринимаются команды для установки геометрии диска. Отчего-то игнорируется запись в порты 1F2 и 1F6, может потому-что из буфера прочитан не весь сектор.

shattered
05.09.2016, 20:55
Да, они именно поэтому игнорируются, и я хочу понять -- так позволено спецификацией (и надо это учесть) или прошивке просто повезло с конкретными экземплярами винтов (и это тоже надо учесть, но по-другому :))

Alex_K
05.09.2016, 21:29
Да, они именно поэтому игнорируются, и я хочу понять -- так позволено спецификацией (и надо это учесть) или прошивке просто повезло с конкретными экземплярами винтов (и это тоже надо учесть, но по-другому :))
Спецификацию обязательно нужно прочесть. Насчет различных экземпляров - у меня контроллер с прошивкой от Олега Ховайко, так у меня работали самые разные винчи и IDE Flash-карты без проблем.

AFZ
06.09.2016, 04:39
И повторюсь там свободная зона была перед самой последней через несколько файлов, то есть ей sqвавить (сжимать) надо было три четыре файла самых последних Если получил Directory Overflow, первым делом подавай команду DIR/SU, она покажет заполнение сегментов оглавления. Ну, и следом SQ, она исправит положение.

А вылет в останов - это какой-то косяк в драйвере, диск с нормальным драйвером нормально сжимается даже будучи системным, просто после сжатия системного диска сразу же производится перезагрузка - SJ, FB - точно, про XM не знаю, TSX, скорее всего, пошлет сразу же после команды SQ SY:.

shattered
06.09.2016, 09:38
Спецификацию обязательно нужно прочесть. Насчет различных экземпляров - у меня контроллер с прошивкой от Олега Ховайко, так у меня работали самые разные винчи и IDE Flash-карты без проблем.

таки да, отдельные команды можно посылать, не дожидаясь снятия DRQ, и 0x91 в их числе (via http://hddguru.com/documentation/2006.01.27-ATA-ATAPI-1/):



10 Protocol overview

Commands can be grouped into different classes according to the protocols
followed for command execution. The command classes with their associated
protocols are defined below.

For all commands, the host first checks if BSY=1, and should proceed no
further unless and until BSY=0. For most commands, the host will also wait
for DRDY=1 before proceeding. Those commands shown with DRDY=x can be
executed when DRDY=0.

<...>

10.3 Non-data commands

This class includes:
- Execute drive diagnostic (DRDY=x);
- Idle;
- Initialize drive parameters (DRDY=x);
- Read power mode;
- Read verify sector(s);
- Recalibrate;
- Seek;
- Set features;
- Set multiple mode;
- Standby.

Execution of these commands involves no data transfer.

a) The host writes any required parameters to the Features, Sector Count, Sector Number, Cylinder, and Drive/Head registers.
b) The host writes the command code to the Command Register.
c) The drive sets BSY.
d) When the drive has completed processing, it clears BSY and asserts INTRQ.
g) The host reads the Status Register.
h) The drive negates INTRQ.

shattered
21.09.2016, 23:11
Оказалось, что WDBOOT дергает основной процессор за ACLO -- дописал это в ядро ВМ2 + еще немного исправлений и...

https://img-fotki.yandex.ru/get/31237/264743.5/0_b4d5b_46a901f5_orig.png (https://fotki.yandex.ru/next/users/shattered/album/137130/view/740699)

nzeemin
21.09.2016, 23:37
Замечу, что имеющиеся драйверы используют совсем немного IDE-команд, хватило реализации следующего:
IDE_COMMAND_IDENTIFY -- 0xec
IDE_COMMAND_READ_MULTIPLE / IDE_COMMAND_READ_MULTIPLE1 -- 0x20/0x21
IDE_COMMAND_SET_CONFIG -- 0x91
IDE_COMMAND_WRITE_MULTIPLE / IDE_COMMAND_WRITE_MULTIPLE1 -- 0x30/0x31

shattered
21.09.2016, 23:54
Оказалось, был еще контроллер MFM-дисков на КМ1809ВГ7 (http://zx-pk.ru/threads/16685-pomogite-opoznat-bloki-dlya-uknts.html) -- это будет несколько посложнее сэмулировать (есть ли на него хоть какая-то документация?)

hobot
16.03.2017, 09:34
Вопрос!
Первичное состоянии нового ЖД IDE УК-НЦ, что бы его увидел контроллер и ПО (WDx) какого должно быть
(в смысле существования раздела и файловой системы) ?
У меня затычка такая - вставляю в контроллер IDE 64мб - WDX виснет после определения номера слота куда
вставлен контроллер. Прежний флеш-диск работает (тьфу тьфу) как часики.
Как проверить, победить и к чему стремиться в подготовке дублирующей флешки?

nzeemin
16.03.2017, 11:42
Оказалось, был еще контроллер MFM-дисков на КМ1809ВГ7 (http://zx-pk.ru/threads/16685-pomogite-opoznat-bloki-dlya-uknts.html) -- это будет несколько посложнее сэмулировать (есть ли на него хоть какая-то документация?)

Это уже из спортивного интереса скорее. Драйвера хотя бы есть?

shattered
20.03.2017, 16:57
Нет, драйверов пока не обнаружено.

PS. вся эта эмуляция -- чистый спортивный интерес :)

nzeemin
22.03.2017, 11:45
Нет, драйверов пока не обнаружено.

PS. вся эта эмуляция -- чистый спортивный интерес :)

Не только. Ещё раскопки и исследования.
Сделал эмулятор => заработали программы => получил новые знания о машине и том как она использовалась.

crackintosh
18.09.2017, 12:52
Проект КНЖМД-УКНЦ еще жив?

nzeemin
18.09.2017, 18:21
Проект КНЖМД-УКНЦ еще жив?

Непонятно что вообще имеется в виду.
В этой ветке в основном обсуждаются особенности реализации КНЖМД для УКНЦ и их эмуляция.
Эмуляция в текущем виде (насколько мне известно) всех в общем-то устраивает.
По аппаратным проектам на эту тему есть отдельные ветки.

crackintosh
18.09.2017, 19:15
Интересует именно аппаратная реализация

crackintosh
19.09.2017, 06:35
Спасибо... оно.

P.S. 2 nzeemin: пытался скопировать образ HDD в вашей ссылке post #25... ссылка на 404.
Исправьте её пожалуйста, на живой ресурс http://archive.pdp-11.org.ru/EMULATORS/UKNCBTL_HDD/uknc_hdd_id/

hobot
19.09.2017, 14:13
Исправьте её пожалуйста, на живой ресурс
по приведённой вами ссылке лежит модифицированный образ для WD прошивки, там только
0 раздел содержит систему и внутри лог.диск с играми, образ ЖД, который публиковал
Никита, лежит рядом по ссылке с окончанием ID (!)
///
Образ ЖД в том виде, в каком он был выложен Никитой Зиминым на форуме ZX.PK.RU
и прошивка к нему. Судя по содержанию, диск был подключен к преподавательской
машине в какой-то школе.
///

crackintosh
19.09.2017, 15:28
Спасибо. Исправил.

hobot
27.03.2021, 01:11
nzeemin, у меня тут снова вопрос по образу ЖД с драйверами ID и соотв. прошивкой.
Некоторые эксперименты с образом (именно в том виде как он был опубликован!!!)
и реакции программ

WD драйвер на ура его кушает в эмуляторе и соотв. WDXR - берётся разделы ваять без вопросов
(всё это в эмуляторе!!!)


# Кaкoй cлoт иcпoльзoвaть [1:1÷2] ? > 1

?WDX-W-Macтep-блoк вaлиднoгo фopмaтa
# Cлeдyeт пpeкpaтить oпepaции. Дeлaть [N] ?

# Moжeм пpoчитaть мacтep-блoк из фaйлa. Дeлaть [N] ?

# Moжeм выпoлнить aвтoдeтeкт. Дeлaть [N] ? Y

Инфopмaция aвтoдeтeктa :

Moдeль # : UKNCBTL Hard Disk
Нocитeль : 1.0
Cepия # : 0000000000
Paзм. бyф.: 0 блoк(oв)

Пpинятo:

Цилиндpoв : 980
Гoлoвoк : 10
Ceктopoв : 34
Paзм.диcкa: 333200 блoк(oв) (166600 K)

# Пapaмeтpы диcкa ycтaнoвлeны вepнo; пpoдoлжaeм. Дeлaть [Y] ?



Но!!! Я то как раз хотел с дискеты на который комплект ID драйверов
перелопатить диск, а он не в какую, в чём моя ошибка ? Образ то
изначально под ID - прошивку и драйвер весь (по содержанию системных файлов)



.LO ID

.DIR ID*.*
05-May-1998
ID .SYS 2P 05-May-1998 IDDRIV.SAV 5P 05-May-1998
IDINST.SAV 6P 05-May-1998 IDREKL.TXT 3 05-May-1998
4 Files, 16 Blocks
1095 Free blocks

.IDDRIV
IDDRIV V02.05
(C) 1994,1995 ТOO Элeктpoнныe Paбoты тeл. (095) 939-34-94
Disk found in slot 1

.IDINST
EJ16 IDE Disk Install programm V3.5
(C) 1994,1995 ТOO Элeктpoнныe Paбoты

?IDINST-Ф-Нeпpaвильныe пapaмeтpы диcкa


:confused_std:

nzeemin
27.03.2021, 10:48
?IDINST-Ф-Нeпpaвильныe пapaмeтpы диcкa



Надо смотреть на содержимое первого сектора диска - похоже что ругается на него.
Не факт что WD и ID драйверы совместимы по формату этого блока, скорее нет.

form
27.03.2021, 20:54
Вопрос чисто для интереса; вариант ID тоже управляется тычками в обычную память или вешается на канал ЦП-ПП?
Помню когда воевал с RSX на УКНЦ, с WD вылезла проблема что кроме того что прерывание от него возникает всегда и приоритет проца тут не поможет, так он еще и управляется через обычную память, а в силу особенностей RSX, процедура которая гоотовит систему к аппаратной загрузке, на диск пишет слепок памяти (вместе со всем что приводит WD к этой записи), а при загрузке, соответствнно, все это успешно прочитается обратно, что немедленно привлечет внимание WD :)

hobot
28.03.2021, 06:13
Надо смотреть на содержимое первого сектора диска - похоже что ругается на него.
Не факт что WD и ID драйверы совместимы по формату этого блока, скорее нет.

Никит, в том то и дело, что я беру образ, который публиковался и подготовлен был тобой и Арсением. Прямая ссылка на образ >
http://hobot.pdp-11.ru/EMULATORS/UKNCBTL_HDD/uknc_hdd_id/
Из него без проблем можно сделать (ничего не меняя в структуре самого файла - я про инверсии и прочее) образ для WD - драйвера, ибо он кушает его без проблем и готов либо размечать либо работать с текущей разбивкой.

Если посмотреть содержимое первоначальное ЖД, там везде использован драйвер ID, который так же без проблем с этим образом работает ( естественно с прошивкой ID * а не WD!!! * ), единственный отказ - это переиначивание разделов... Вот такая картина.
Дискета для работы с ID >
http://hobot.pdp-11.ru/ukdwk_archive/ukncbtlwebcomplekt/Other/ID/

form, уже несколько дней нет доступа к основному архиву, поэтому в этом сообщении все ссылки на зеркало.
Про драйвера:
Исходники WD есть, есть вариант твоего драйвера - он работает отлично, а вот исходники ID или HD мне не попадались вроде бы.

Никита, если ты поймешь в чём глюк - пожалуйста научи как победить. В целом это не жизненно важно или критично, я просто попытался с помощью пофиксаной дискеты с ID переиначить образ и сам видишь что явно затык какой-то в эмуляторе. Повторю (уточню), что при загрузке с данной дискеты доступ к существующим разделам нормальный,
все операции I\O работают корректно в том числе и загрузка по команде BOOT IDn:

Как-то так.
Содержимое файла IDREKL.TXT - по ссылке на дискету в виде шпаргалки\описания.

:confused_std:

+++++++++++++++++++++++++
на разделе ID0, где OWNER : DIMA
нашлась вот такая утилита "мощная" и исходник с комментария


ЛAТ
EP [AK] V03.00 Tehnocom (536-50-90).

.DIR RBMEM

RBMEM .SAV 4 06-Sep-95 RBMEM .COM 1 06-Sep-95
RBMEM .OBJ 3 31-Aug-95 RBMEM .MAC 9
4 Files, 17 Blocks
50482 Free blocks

.R RBMEM
*
RBMEM V01.00 (C) AO 'Элeктpoнныe paбoты'
Peзepвиpoвaниe пaмяти для oбecпeчeния paбoты пaкeтoв ROBOTLANDIA, WRITER
пpи зaгpyжeнныx в ПП дpaйвepax типa UNDRIV, HDDRIV, IDDRIV и т.д.
Иcпoльзoвaниe:
UNDRIV R oчиcтить ПП и зaгpyзить дpaйвep в ПП
RBMEM /A зapeзepвиpoвaть пaмять ПП
UNDRIV пepeзaгpyзить дpaйвep в ПП
RBMEM /F ocвoбoдить зapeзepвиpoвaннyю пaмять

*



Про UNDRIV UN.SYS пишут, что это


NET128 (C)

СЕТЕВОЙ КОМПЛЕКС ДЛЯ УКНЦ (МС0511)



- 4 -

СОСТАВ
------

1. Сетевые адаптеры (СА) - до 16 шт. (по числу ЭВМ
в классе минус один);
2. Сетевой адаптер, совмещенный с
контроллером ГМД (СА/КМД), без кабеля - один;
3. Шунт с резистором 75 ом - один;
4. Винчестер - накопитель на жестком
диске 20, 30 или 40 МБ (ЖД) - один, устанавливается
на одну из ЭВМ класса -
файловый сервер (ФС);
5. Программа обслуживания сетевой - в процессе работы
системы - NET128.SAV сети выполняется на
файловом сервере;
6. Программа UNDRIV.SAV - работа с - выполняется на всех
СА в периферийном процессоре УКНЦ ЭВМ класса, кроме ФС;
7. Драйвер РМУ - выполняется на всех
для СА - UN.SYS ЭВМ класса, кроме ФС;
8. Программа регистрации и установки - регистрирует дату на ФС
даты - DAY.SAV и устанавливает дату при
загрузке каждого РМУ;
9. Вспомогательный файл SY:NET128.DRV - используется программой
обслуживания

rzk
06.06.2021, 09:35
OWNER: DIMA - это я :v2_dizzy_botan:

немного посмотрел на содержимое диска в эмуляторе, поностальгировал.

спасибо за проделанный труд по запуску с этого диска.

nzeemin
06.06.2021, 09:43
OWNER: DIMA - это я :v2_dizzy_botan:

немного посмотрел на содержимое диска в эмуляторе, поностальгировал.

спасибо за проделанный труд по запуску с этого диска.

Спасибо вам за предоставленный УКНЦ и контроллер винчестера - он очень помог в разработке эмулятора.

Xrust
22.05.2024, 11:35
Пытаюсь сделать версию контроллера на CPLD epm7128. Запихнул в неё схему собственно контроллера, ПЗУ пока не подключал.
WDX контроллер видит, но устройства подключенные нормально определить не может. Самое большее, чего удалось добиться - увидел DOM 128mb, но не смог прочитать с него ничего:
https://pic.maxiol.com/thumbs2/1716366651.3585228777.img20240518140443.jpg (https://pic.maxiol.com/?v=1716366651.3585228777.img20240518140443.jpg&dp=2)
Карты памяти и винчестер Самсунг не видит вовсе.
Подскажите, в какую сторону копать?

Xrust
22.05.2024, 23:30
Вот так сейчас прошивка ПЛИС выглядит.

https://pic.maxiol.com/thumbs2/1716409257.3274620859.ide.png (https://pic.maxiol.com/?v=1716409257.3274620859.ide.png&dp=2)

А это схема платы.
80844

Часть выводов ПЛИС пока не задействована.

Alex_K
24.05.2024, 10:37
А это схема платы.
А вывод 38 разъёма IDE (CS3) у вас в воздухе висит? В оригинальном контроллере туда подаётся +5В, т.к. альтернативный регистр состояния не используется.
Так же в IDE регистры с 1F1 по 1F7 (здесь с 110000 по 110014) восьмибитные, при их чтении старший байт обычно не выдаётся. В оригинальном контроллере в 155РЕ3 во второй половине записаны единицы и используется подтяжка на резисторах. Соответственно выдавались единицы, т.к. МПИ инверсная, после инверсии получались нули.

Xrust
25.05.2024, 23:05
А вывод 38 разъёма IDE (CS3) у вас в воздухе висит?
Это я поправил, но причина была в другом. Когда внимательно прозвонил плату. нашел отсутствующие дорожки. Так и не понял, как недоразведенный вариант попал в заказ? МГТФ решил проблему, все заработало. CF через переходник пишутся/читаются, DOM и винт заработали тоже.

Xrust
29.07.2024, 19:38
Документация на совмещенный контроллер IDE + KAKAVE + Мышь

Этот вариант контроллера построен на МК и ПЛИС и имеет малые габариты (плата 100х100мм).

https://pic.maxiol.com/thumbs2/1722270744.3274620859.kkveide.png (https://pic.maxiol.com/?v=1722270744.3274620859.kkveide.png&dp=2) https://pic.maxiol.com/thumbs2/1722267885.3274620859.img20240722004926.jpg (https://pic.maxiol.com/?v=1722267885.3274620859.img20240722004926.jpg&dp=2)
https://pic.maxiol.com/thumbs2/1722267939.3274620859.img20240724233446.jpg (https://pic.maxiol.com/?v=1722267939.3274620859.img20240724233446.jpg&dp=2) https://pic.maxiol.com/thumbs2/1722268043.3274620859.img20240724233928.jpg (https://pic.maxiol.com/?v=1722268043.3274620859.img20240724233928.jpg&dp=2)


81037
81038
81039
81040

Исходник скетча Ардуино для Атмеги. Требуется установка ядра MightyCore (https://github.com/MCUdude/MightyCore) и библиотеки Ps2mouse (https://playground.arduino.cc/ComponentLib/Ps2mouse/).


#include <ps2.h>
#define DATA_PIN 18
#define CLOCK_PIN 19
#define SELECT3 10
#define SELECT4 11
#define DIN 12
#define DOUT 13
#define VA87DIR 14
#define RPLY 15
#define ADDREQ 23


const uint8_t data[] PROGMEM =
{
0xA0, 0x00, 0x17, 0x8D, 0x80, 0x00, 0xC6, 0x15, 0x00, 0x80, 0xC3, 0x15, 0x38, 0x00, 0xC2, 0x15,
0x1A, 0x00, 0x81, 0x10, 0x52, 0x94, 0x81, 0x0A, 0xC3, 0x7E, 0x37, 0x00, 0x90, 0x00, 0x2D, 0x00,
0x00, 0x00, 0xDF, 0x8D, 0x8B, 0x00, 0xBC, 0x15, 0xFD, 0x80, 0xFD, 0x15, 0x80, 0x00, 0xC9, 0x15,
0x8B, 0x00, 0x03, 0x10, 0x81, 0x94, 0x5F, 0x0A, 0x14, 0x7E, 0xBE, 0x00, 0xFD, 0x00, 0xF8, 0x00,
0x01, 0x00, 0xC3, 0x8D, 0x1D, 0x00, 0x1E, 0x15, 0x00, 0x80, 0xC2, 0x15, 0x15, 0x00, 0x00, 0x15,
0x02, 0x00, 0x81, 0x10, 0x10, 0x94, 0x52, 0x0A, 0x94, 0x7E, 0x81, 0x00, 0x0A, 0x00, 0xC3, 0x00,
0x7E, 0x00, 0x02, 0x8D, 0x01, 0x00, 0x42, 0x15, 0x00, 0x80, 0x02, 0x15, 0x00, 0x00, 0x5F, 0x15,
0x00, 0x00, 0x00, 0x10, 0x02, 0x94, 0x00, 0x0A, 0x08, 0x7E, 0x11, 0x00, 0x92, 0x00, 0x94, 0x00,
0x00, 0x00, 0x00, 0x8D, 0x02, 0x00, 0x5C, 0x15, 0x07, 0x80, 0x48, 0x15, 0x00, 0x00, 0x49, 0x15,
0x49, 0x00, 0xFF, 0x10, 0x0F, 0x94, 0x8D, 0x0A, 0x05, 0x7E, 0x00, 0x00, 0x17, 0x00, 0x74, 0x00,
0x03, 0x00, 0x00, 0x8D, 0x37, 0x00, 0x50, 0x15, 0xCA, 0x80, 0x03, 0x15, 0x37, 0x00, 0x50, 0x15,
0xAC, 0x00, 0x03, 0x10, 0x37, 0x94, 0x50, 0x0A, 0xA2, 0x7E, 0x02, 0x00, 0xDF, 0x00, 0x15, 0x00,
0x26, 0x00, 0x06, 0x8D, 0x1C, 0x00, 0x00, 0x15, 0x1F, 0x80, 0x0A, 0x15, 0x1E, 0x00, 0x00, 0x15,
0x00, 0x00, 0x89, 0x10, 0x3C, 0x94, 0x06, 0x0A, 0x00, 0x7E, 0x89, 0x00, 0x5A, 0x00, 0x06, 0x00,
0x04, 0x00, 0x89, 0x8D, 0x05, 0x00, 0x07, 0x15, 0xC0, 0x80, 0x15, 0x15, 0xFF, 0x00, 0xFF, 0x15,
0xFD, 0x00, 0x81, 0x10, 0xC0, 0x94, 0x8B, 0x0A, 0x05, 0x7E, 0x03, 0x00, 0x17, 0x00, 0xA0, 0x00,
0xFF, 0x00, 0x00, 0x8D, 0x04, 0x00, 0x02, 0x15, 0x02, 0x80, 0x89, 0x15, 0xE5, 0x00, 0x06, 0x15,
0x02, 0x00, 0x89, 0x10, 0xF6, 0x94, 0x06, 0x0A, 0xF7, 0x7E, 0x09, 0x00, 0x30, 0x00, 0x02, 0x00,
0xF7, 0x00, 0x09, 0x8D, 0xFC, 0x00, 0x01, 0x15, 0x02, 0x80, 0x03, 0x15, 0x04, 0x00, 0x89, 0x15,
0x98, 0x00, 0x06, 0x10, 0x77, 0x94, 0x94, 0x0A, 0xFE, 0x7E, 0x05, 0x00, 0x43, 0x00, 0x94, 0x00,
0xF7, 0x00, 0x70, 0x8D, 0xF8, 0x00, 0x05, 0x15, 0xF7, 0x80, 0x10, 0x15, 0xE2, 0x00, 0x05, 0x15,
0xC5, 0x00, 0x1D, 0x10, 0xEA, 0x94, 0x07, 0x0A, 0x85, 0x7E, 0x0A, 0x00, 0x57, 0x00, 0x75, 0x00,
0x02, 0x00, 0x00, 0x8D, 0x77, 0x00, 0x61, 0x15, 0x9C, 0x80, 0x05, 0x15, 0xC0, 0x00, 0x15, 0x15,
0x5C, 0x00, 0x09, 0x10, 0x05, 0x94, 0x60, 0x0A, 0xC2, 0x7E, 0x15, 0x00, 0x01, 0x00, 0x00, 0x00,
0x03, 0x00, 0x0A, 0x8D, 0xD0, 0x00, 0x10, 0x15, 0x90, 0x80, 0x10, 0x15, 0xC9, 0x00, 0x0B, 0x15,
0x0D, 0x00, 0x03, 0x10, 0x05, 0x94, 0x20, 0x0A, 0x06, 0x7E, 0x03, 0x00, 0xD7, 0x00, 0xAD, 0x00,
0xBE, 0x00, 0x04, 0x8D, 0x37, 0x00, 0x00, 0x15, 0x02, 0x80, 0x86, 0x15, 0xB7, 0x00, 0x8A, 0x15,
0xB6, 0x00, 0x04, 0x10, 0x42, 0x94, 0x64, 0x0A, 0x43, 0x7E, 0x0B, 0x00, 0x17, 0x00, 0x20, 0x00,
0xF8, 0x00, 0x09, 0x8D, 0xEF, 0x00, 0x87, 0x15, 0x37, 0x80, 0x60, 0x15, 0x72, 0x00, 0x05, 0x15,
0x37, 0x00, 0x60, 0x10, 0x4E, 0x94, 0x03, 0x0A, 0x37, 0x7E, 0xE0, 0x00, 0x64, 0x00, 0x03, 0x00,
0x00, 0x00, 0x89, 0x8D, 0x46, 0x00, 0x06, 0x15, 0x00, 0x80, 0x89, 0x15, 0x5A, 0x00, 0x06, 0x15,
0xC0, 0x00, 0x15, 0x10, 0x80, 0x94, 0x06, 0x0A, 0xC5, 0x7E, 0x15, 0x00, 0xFF, 0x00, 0xFF, 0x00,
0xFD, 0x00, 0x81, 0x8D, 0x06, 0x00, 0x03, 0x15, 0xC0, 0x80, 0x15, 0x15, 0x8C, 0x00, 0x06, 0x15,
0xC5, 0x00, 0x0A, 0x10, 0x02, 0x94, 0x02, 0x0A, 0x02, 0x7E, 0x89, 0x00, 0xD3, 0x00, 0x06, 0x00,
0x06, 0x00, 0x89, 0x8D, 0xC2, 0x00, 0x15, 0x15, 0x40, 0x80, 0x00, 0x15, 0xA6, 0x00, 0x12, 0x15,
0xCA, 0x00, 0x15, 0x10, 0x7A, 0x94, 0x06, 0x0A, 0xF7, 0x7E, 0x45, 0x00, 0xF8, 0x00, 0xFF, 0x00,
0x70, 0x00, 0x07, 0x8D, 0xF7, 0x00, 0xDD, 0x15, 0x6C, 0x80, 0x07, 0x15, 0x6A, 0x00, 0x04, 0x15,
0x00, 0x00, 0x0A, 0x10, 0xD7, 0x94, 0xAD, 0x0A, 0x62, 0x7E, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00,
0x65, 0x00, 0x05, 0x8D, 0x04, 0x00, 0x89, 0x15, 0x37, 0x80, 0x07, 0x15, 0xF7, 0x00, 0x1D, 0x15,
0x5A, 0x00, 0x07, 0x10, 0x8A, 0x94, 0x03, 0x0A, 0xF7, 0x7E, 0x0B, 0x00, 0x86, 0x00, 0x03, 0x00,
0x4B, 0x00, 0x81, 0x8D, 0xDF, 0x00, 0x8B, 0x15, 0x70, 0x80, 0xFF, 0x15, 0xFA, 0x00, 0x80, 0x15,
0xC0, 0x00, 0x97, 0x10, 0x72, 0x94, 0xFF, 0x0A, 0x17, 0x7E, 0xA0, 0x00, 0x7F, 0x00, 0x00, 0x00,
0x45, 0x00, 0x03, 0x8D, 0x17, 0x00, 0xA0, 0x15, 0x0D, 0x80, 0x00, 0x15, 0x40, 0x00, 0x03, 0x15,
0x17, 0x00, 0xA0, 0x10, 0x20, 0x94, 0x00, 0x0A, 0x2F, 0x7E, 0x02, 0x00, 0x04, 0x00, 0x0A, 0x00,
0xC5, 0x00, 0x1D, 0x8D, 0x30, 0x00, 0x07, 0x15, 0xC5, 0x80, 0x65, 0x15, 0x19, 0x00, 0x00, 0x15,
0x17, 0x00, 0x73, 0x10, 0x32, 0x94, 0x00, 0x0A, 0x17, 0x7E, 0x21, 0x00, 0x09, 0x00, 0x00, 0x00,
0x02, 0x00, 0x07, 0x8D, 0xC4, 0x00, 0x15, 0x15, 0x09, 0x80, 0x00, 0x15, 0xC4, 0x00, 0x65, 0x15,
0x30, 0x00, 0x00, 0x10, 0x37, 0x94, 0x91, 0x0A, 0x00, 0x7E, 0x04, 0x00, 0x04, 0x00, 0x89, 0x00,
0x1E, 0x00, 0x07, 0x8D, 0xDF, 0x00, 0x8B, 0x15, 0x70, 0x80, 0xFF, 0x15, 0xFD, 0x00, 0x80, 0x15,
0xC3, 0x00, 0x97, 0x10, 0x72, 0x94, 0xFF, 0x0A, 0xD7, 0x7E, 0xA0, 0x00, 0x0D, 0x00, 0x00, 0x00,
0x12, 0x00, 0x03, 0x8D, 0xD7, 0x00, 0xA0, 0x15, 0x30, 0x80, 0x00, 0x15, 0xF5, 0x00, 0x05, 0x15,
0xD7, 0x00, 0xA0, 0x10, 0x39, 0x94, 0x00, 0x0A, 0xF2, 0x7E, 0x06, 0x00, 0xF7, 0x00, 0x90, 0x00,
0xDC, 0x00, 0x03, 0x8D, 0xC3, 0x00, 0xE5, 0x15, 0x30, 0x80, 0x00, 0x15, 0xD7, 0x00, 0x70, 0x15,
0x32, 0x00, 0x00, 0x10, 0xF7, 0x94, 0x20, 0x0A, 0xE6, 0x7E, 0x06, 0x00, 0x03, 0x00, 0x03, 0x00,
0xF7, 0x00, 0x10, 0x8D, 0xE0, 0x00, 0x06, 0x15, 0x01, 0x80, 0x0A, 0x15, 0x04, 0x00, 0x89, 0x15,
0x34, 0x00, 0x07, 0x10, 0xBB, 0x94, 0x01, 0x0A, 0x17, 0x7E, 0xA0, 0x00, 0x30, 0x00, 0x00, 0x00,
0xBA, 0x00, 0x87, 0x8D, 0x37, 0x00, 0xA0, 0x15, 0xCA, 0x80, 0x03, 0x15, 0xB7, 0x00, 0x82, 0x15,
0x37, 0x00, 0xA0, 0x10, 0xC6, 0x94, 0x03, 0x0A, 0x05, 0x7E, 0x03, 0x00, 0x37, 0x00, 0x90, 0x00,
0xC0, 0x00, 0x03, 0x8D, 0x37, 0x00, 0x90, 0x15, 0xBC, 0x80, 0x06, 0x15, 0x01, 0x00, 0x0A, 0x15,
0xC1, 0x00, 0x0B, 0x10, 0x04, 0x94, 0x02, 0x0A, 0xF7, 0x7E, 0x09, 0x00, 0xBC, 0x00, 0x00, 0x00,
0xF7, 0x00, 0x09, 0x8D, 0xE6, 0x00, 0x00, 0x15, 0x04, 0x80, 0x89, 0x15, 0x48, 0x00, 0x07, 0x15,
0x04, 0x00, 0x89, 0x10, 0x4B, 0x94, 0x07, 0x0A, 0x04, 0x7E, 0x89, 0x00, 0x1B, 0x00, 0x07, 0x00,
0xC0, 0x00, 0x9D, 0x8D, 0x9E, 0x00, 0x03, 0x15, 0xC0, 0x80, 0xC5, 0x15, 0xF8, 0x00, 0xFF, 0x15,
0x37, 0x00, 0x90, 0x10, 0xBD, 0x94, 0x02, 0x0A, 0x8A, 0x7E, 0x15, 0x00, 0xC3, 0x00, 0x15, 0x00,
0x64, 0x00, 0x00, 0x8D, 0xD3, 0x00, 0x15, 0x15, 0x7E, 0x80, 0x06, 0x15, 0xCB, 0x00, 0x15, 0x15,
0xE2, 0x00, 0x00, 0x10, 0xCB, 0x94, 0x8B, 0x0A, 0xFE, 0x7E, 0x81, 0x00, 0x0D, 0x00, 0x02, 0x00,
0xC2, 0x00, 0x0C, 0x8D, 0x03, 0x00, 0x0A, 0x15, 0xC1, 0x80, 0x15, 0x15, 0xF8, 0x00, 0x09, 0x15,
0x57, 0x00, 0x22, 0x10, 0xA0, 0x94, 0x00, 0x0A, 0x08, 0x7E, 0x02, 0x00, 0x02, 0x00, 0x8D, 0x00,
0x53, 0x00, 0x14, 0x8D, 0x53, 0x00, 0x14, 0x15, 0x83, 0x80, 0x7E, 0x15, 0x02, 0x00, 0x8D, 0x15,
0x07, 0x00, 0x0A, 0x10, 0x02, 0x94, 0x89, 0x0A, 0xC0, 0x7E, 0x06, 0x00, 0x02, 0x00, 0x89, 0x00,
0xAF, 0x00, 0x06, 0x8D, 0xF7, 0x00, 0x09, 0x15, 0x1A, 0x80, 0x00, 0x15, 0xF7, 0x00, 0x09, 0x15,
0x10, 0x00, 0x00, 0x10, 0x2D, 0x94, 0x8A, 0x0A, 0x77, 0x7E, 0x09, 0x00, 0x06, 0x00, 0x00, 0x00,
0xFF, 0x00, 0xFF, 0x8D, 0xDD, 0x00, 0x8B, 0x15, 0x85, 0x80, 0x00, 0x15, 0xE6, 0x00, 0x15, 0x15,
0xFA, 0x00, 0x03, 0x10, 0xE6, 0x94, 0x11, 0x0A, 0x5F, 0x7E, 0x95, 0x00, 0xBE, 0x00, 0xFD, 0x00,
0xDF, 0x00, 0x8B, 0x8D, 0xBC, 0x00, 0xFD, 0x15, 0xFD, 0x80, 0x80, 0x15, 0x87, 0x00, 0x00, 0x15,
0xF5, 0x00, 0x15, 0x10, 0xE7, 0x94, 0x0B, 0x0A, 0x02, 0x7E, 0x00, 0x00, 0x40, 0x00, 0x15, 0x00,
0x06, 0x00, 0x01, 0x8D, 0x26, 0x00, 0x10, 0x15, 0x00, 0x80, 0x11, 0x15, 0x77, 0x00, 0x09, 0x15,
0x04, 0x00, 0x00, 0x10, 0x80, 0x94, 0x15, 0x0A, 0x80, 0x7E, 0x0A, 0x00, 0xC4, 0x00, 0x15, 0x00,
0x50, 0x00, 0x07, 0x8D, 0x03, 0x00, 0x95, 0x15, 0x03, 0x80, 0xA2, 0x15, 0xF5, 0x00, 0x03, 0x15,
0xD4, 0x00, 0x8B, 0x10, 0xFE, 0x94, 0x02, 0x0A, 0x83, 0x7E, 0x0A, 0x00, 0xCC, 0x00, 0x8B, 0x00,
0xF9, 0x00, 0x02, 0x8D, 0xDF, 0x00, 0x8B, 0x15, 0x74, 0x80, 0xFF, 0x15, 0xFD, 0x00, 0x80, 0x15,
0x1F, 0x00, 0x94, 0x10, 0x76, 0x94, 0xFF, 0x0A, 0xF0, 0x7E, 0x02, 0x00, 0x85, 0x00, 0x00, 0x00,
0xB7, 0x00, 0x08, 0x8D, 0x18, 0x00, 0x00, 0x15, 0xFF, 0x80, 0x00, 0x15, 0xC5, 0x00, 0x62, 0x15,
0x05, 0x00, 0x51, 0x10, 0x87, 0x94, 0x00, 0x0A, 0xB7, 0x7E, 0x08, 0x00, 0x0C, 0x00, 0x00, 0x00,
0xFE, 0x00, 0x00, 0x8D, 0x45, 0x00, 0x0A, 0x15, 0x04, 0x80, 0x0B, 0x15, 0x13, 0x00, 0x11, 0x15,
0x4B, 0x00, 0x11, 0x10, 0x87, 0x94, 0x00, 0x0A, 0x80, 0x7E, 0x14, 0x00, 0xC1, 0x00, 0x15, 0x00,
0xF8, 0x00, 0x09, 0x8D, 0x43, 0x00, 0x10, 0x15, 0x04, 0x80, 0x0A, 0x15, 0x05, 0x00, 0x0A, 0x15,
0xC4, 0x00, 0x64, 0x10, 0x45, 0x94, 0x0B, 0x0A, 0x03, 0x7E, 0x7E, 0x00, 0x82, 0x00, 0x00, 0x00,
0xF7, 0x00, 0x09, 0x8D, 0x10, 0x00, 0x00, 0x15, 0x00, 0x80, 0x89, 0x15, 0x60, 0x00, 0x06, 0x15,
0x87, 0x00, 0x00, 0x10, 0xF7, 0x94, 0x09, 0x0A, 0x06, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00,
0x66, 0x00, 0x06, 0x8D, 0x87, 0x00, 0x00, 0x15, 0x00, 0x80, 0x89, 0x15, 0x50, 0x00, 0x06, 0x15,
0xF7, 0x00, 0x15, 0x10, 0xFF, 0x94, 0xFF, 0x0A, 0x04, 0x7E, 0x00, 0x00, 0xDE, 0x00, 0x09, 0x00,
0xD7, 0x00, 0x0B, 0x8D, 0x00, 0x00, 0x00, 0x15, 0xFD, 0x80, 0x81, 0x15, 0xF5, 0x00, 0x03, 0x15,
0x02, 0x00, 0x89, 0x10, 0xC7, 0x94, 0x06, 0x0A, 0xF7, 0x7E, 0x17, 0x00, 0x40, 0x00, 0x00, 0x00,
0x46, 0x00, 0x00, 0x8D, 0xDF, 0x00, 0x15, 0x15, 0x4E, 0x80, 0x02, 0x15, 0x40, 0x00, 0x00, 0x15,
0x87, 0x00, 0x00, 0x10, 0xE6, 0x94, 0x17, 0x0A, 0x2C, 0x7E, 0xFE, 0x00, 0xDF, 0x00, 0x15, 0x00,
0x06, 0x00, 0x00, 0x8D, 0x2C, 0x00, 0xFE, 0x15, 0xD7, 0x80, 0x0A, 0x15, 0xF4, 0x00, 0x01, 0x15,
0x07, 0x00, 0x03, 0x10, 0xDF, 0x94, 0x8B, 0x0A, 0x00, 0x7E, 0x90, 0x00, 0x11, 0x00, 0x03, 0x00,
0xD7, 0x00, 0xA7, 0x8D, 0x00, 0x00, 0x90, 0x15, 0xFF, 0x80, 0x00, 0x15, 0x0D, 0x00, 0x03, 0x15,
0xDF, 0x00, 0x1D, 0x10, 0x1C, 0x94, 0x00, 0x0A, 0x40, 0x7E, 0x00, 0x00, 0xE6, 0x00, 0x17, 0x00,
0x08, 0x00, 0xFE, 0x8D, 0xDF, 0x00, 0x15, 0x15, 0x16, 0x80, 0x01, 0x15, 0x08, 0x00, 0xFE, 0x15,
0xDF, 0x00, 0x17, 0x10, 0x00, 0x94, 0x90, 0x0A, 0x0C, 0x7E, 0xFE, 0x00, 0x9F, 0x00, 0x15, 0x00,
0x08, 0x00, 0xFE, 0x8D, 0x9F, 0x00, 0x15, 0x15, 0x2C, 0x80, 0xFE, 0x15, 0x5F, 0x00, 0x00, 0x15,
0xB7, 0x00, 0x08, 0x10, 0x64, 0x94, 0x00, 0x0A, 0xFE, 0x7E, 0xFE, 0x00, 0xFF, 0x00, 0xFF, 0x00,
0x5F, 0x00, 0xCF, 0x8D, 0x4B, 0x00, 0x12, 0x15, 0xDF, 0x80, 0x15, 0x15, 0x4C, 0x00, 0x02, 0x15,
0x08, 0x00, 0xFE, 0x10, 0x09, 0x94, 0x10, 0x0A, 0x87, 0x7E, 0x00, 0x00, 0xB7, 0x00, 0x08, 0x00,
0x4E, 0x00, 0x00, 0x8D, 0xFE, 0x00, 0xFE, 0x15, 0xFF, 0x80, 0xFF, 0x15, 0x5F, 0x00, 0xDF, 0x15,
0xC9, 0x00, 0x12, 0x10, 0xC0, 0x94, 0x0B, 0x0A, 0xF3, 0x7E, 0x03, 0x00, 0xB7, 0x00, 0x08, 0x00,
0x3E, 0x00, 0x00, 0x8D, 0xFE, 0x00, 0xFE, 0x15, 0xFF, 0x80, 0xFF, 0x15, 0x5F, 0x00, 0x13, 0x15,
0xC9, 0x00, 0x12, 0x10, 0xC0, 0x94, 0x0B, 0x0A, 0xEB, 0x7E, 0x02, 0x00, 0xDF, 0x00, 0x15, 0x00,
0xFF, 0x00, 0x04, 0x8D, 0x08, 0x00, 0xFE, 0x15, 0x89, 0x80, 0x8A, 0x15, 0x49, 0x00, 0x8A, 0x15,
0x77, 0x00, 0xC2, 0x10, 0x12, 0x94, 0x00, 0x0A, 0xDF, 0x7E, 0x15, 0x00, 0x02, 0x00, 0x05, 0x00,
0x08, 0x00, 0xFE, 0x8D, 0x77, 0x00, 0x92, 0x15, 0x04, 0x80, 0x00, 0x15, 0xB7, 0x00, 0x08, 0x15,
0x16, 0x00, 0x00, 0x10, 0xFE, 0x94, 0xFE, 0x0A, 0xFF, 0x7E, 0xFF, 0x00, 0x5F, 0x00, 0x6E, 0x00,
0x00, 0x00, 0x00, 0x8D, 0xB7, 0x00, 0x08, 0x15, 0x0A, 0x80, 0x00, 0x15, 0xFE, 0x00, 0xFE, 0x15,
0xFF, 0x00, 0xFF, 0x10, 0x5F, 0x94, 0xDF, 0x0A, 0xC9, 0x7E, 0x12, 0x00, 0xD2, 0x00, 0x01, 0x00,
0xC0, 0x00, 0x15, 0x8D, 0x06, 0x00, 0x00, 0x15, 0xC1, 0x80, 0x15, 0x15, 0x0C, 0x00, 0xFE, 0x15,
0xF7, 0x00, 0x09, 0x10, 0x52, 0x94, 0x00, 0x0A, 0xF7, 0x7E, 0x09, 0x00, 0x4A, 0x00, 0x00, 0x00,
0xC4, 0x00, 0x97, 0x8D, 0x00, 0x00, 0x90, 0x15, 0xFB, 0x80, 0x80, 0x15, 0xC4, 0x00, 0x8C, 0x15,
0xF9, 0x00, 0x84, 0x10, 0xC4, 0x94, 0x15, 0x0A, 0x0C, 0x7E, 0x90, 0x00, 0xC4, 0x00, 0x0A, 0x00,
0xA4, 0x00, 0x94, 0x8D, 0x03, 0x00, 0x7E, 0x15, 0xB7, 0x80, 0x14, 0x15, 0x22, 0x00, 0x00, 0x15,
0x14, 0x00, 0x03, 0x10, 0xC0, 0x94, 0x15, 0x0A, 0x00, 0x7E, 0x01, 0x00, 0xF7, 0x00, 0x09, 0x00,
0x28, 0x00, 0x00, 0x8D, 0x03, 0x00, 0x93, 0x15, 0xFC, 0x80, 0x80, 0x15, 0x83, 0x00, 0x0C, 0x15,
0x0C, 0x00, 0x86, 0x10, 0xC3, 0x94, 0x45, 0x0A, 0xDB, 0x7E, 0xFF, 0x00, 0xF7, 0x00, 0x02, 0x00,
0xC3, 0x00, 0x15, 0x8D, 0x0E, 0x00, 0x90, 0x15, 0xDF, 0x80, 0x15, 0x15, 0xFC, 0x00, 0x04, 0x15,
0x08, 0x00, 0xFE, 0x10, 0x00, 0x94, 0x00, 0x0A, 0x9F, 0x7E, 0x0A, 0x00, 0x08, 0x00, 0xFE, 0x00,
0x04, 0x00, 0x7E, 0x8D, 0x5F, 0x00, 0x11, 0x15, 0x2C, 0x80, 0xFE, 0x15, 0x00, 0x00, 0x8D, 0x15,
0x82, 0x00, 0x00, 0x10, 0xB7, 0x94, 0x08, 0x0A, 0xF4, 0x7E, 0xFF, 0x00, 0xC5, 0x00, 0x17, 0x00,
0x2C, 0x00, 0xFE, 0x8D, 0x0F, 0x00, 0x8D, 0x15, 0xDF, 0x80, 0x15, 0x15, 0x06, 0x00, 0x00, 0x15,
0x2C, 0x00, 0xFE, 0x10, 0x87, 0x94, 0x00, 0x0A, 0xC4, 0x7E, 0x15, 0x00, 0x08, 0x00, 0xFE, 0x00,
0xC5, 0x00, 0x15, 0x8D, 0x0C, 0x00, 0xFE, 0x15, 0x03, 0x80, 0x0A, 0x15, 0xDF, 0x00, 0x0B, 0x15,
0x1A, 0x00, 0x00, 0x10, 0x26, 0x94, 0x02, 0x0A, 0x83, 0x7E, 0x0A, 0x00, 0xDF, 0x00, 0x15, 0x00,
0x06, 0x00, 0x00, 0x8D, 0x1A, 0x00, 0x00, 0x15, 0xCC, 0x80, 0x15, 0x15, 0x27, 0x00, 0x05, 0x15,
0x40, 0x00, 0x13, 0x10, 0x06, 0x94, 0x07, 0x0A, 0xDF, 0x7E, 0x09, 0x00, 0x5A, 0x00, 0xFC, 0x00,
0x0D, 0x00, 0x20, 0x8D, 0x1A, 0x00, 0x87, 0x15, 0x5F, 0x80, 0x10, 0x15, 0x20, 0x00, 0x00, 0x15,
0xC0, 0x00, 0x15, 0x10, 0x50, 0x94, 0xF8, 0x0A, 0x02, 0x7E, 0x10, 0x00, 0xDF, 0x00, 0x09, 0x00,
0x5A, 0x00, 0xFC, 0x8D, 0x02, 0x00, 0x20, 0x15, 0x11, 0x80, 0x87, 0x15, 0x83, 0x00, 0x0A, 0x15,
0xCC, 0x00, 0x15, 0x10, 0xD8, 0x94, 0x03, 0x0A, 0x80, 0x7E, 0x0C, 0x00, 0x5F, 0x00, 0x09, 0x00,
0x82, 0x00, 0xAB, 0x8D, 0xC1, 0x00, 0x65, 0x15, 0xB4, 0x80, 0x07, 0x15, 0x71, 0x00, 0x60, 0x15,
0x62, 0x00, 0x00, 0x10, 0xC0, 0x94, 0x17, 0x0A, 0x56, 0x7E, 0x0E, 0x00, 0x02, 0x00, 0x81, 0x00,
0x31, 0x00, 0x10, 0x8D, 0x8E, 0x00, 0x01, 0x15, 0x5F, 0x80, 0x10, 0x15, 0x56, 0x00, 0x0E, 0x15,
0xCC, 0x00, 0x15, 0x10, 0x5A, 0x94, 0x01, 0x0A, 0xCD, 0x7E, 0x10, 0x00, 0x87, 0x00, 0x00, 0x00,
0x76, 0x00, 0x11, 0x8D, 0x02, 0x00, 0x00, 0x15, 0x85, 0x80, 0x13, 0x15, 0x45, 0x00, 0x19, 0x15,
0x45, 0x00, 0x1D, 0x10, 0x34, 0x94, 0x7D, 0x0A, 0x85, 0x7E, 0x00, 0x00, 0xE8, 0x00, 0x03, 0x00,
0x0E, 0x00, 0x04, 0x8D, 0x14, 0x00, 0x04, 0x15, 0x16, 0x80, 0x04, 0x15, 0x00, 0x00, 0x10, 0x15,
0x1A, 0x00, 0x00, 0x10, 0x40, 0x94, 0x02, 0x0A, 0xA2, 0x7E, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x8D, 0x1A, 0x00, 0x00, 0x15, 0x40, 0x80, 0x02, 0x15, 0xC2, 0x00, 0x05, 0x15,
0x32, 0x00, 0x00, 0x10, 0x00, 0x94, 0x10, 0x0A, 0x1A, 0x7E, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00,
0xEE, 0x00, 0x04, 0x8D, 0x6A, 0x00, 0x00, 0x15, 0x00, 0x80, 0x18, 0x15, 0x1A, 0x00, 0x00, 0x15,
0x40, 0x00, 0x02, 0x10, 0x00, 0x94, 0x18, 0x0A, 0x1A, 0x7E, 0x00, 0x00, 0x56, 0x00, 0x02, 0x00,
0x00, 0x00, 0x18, 0x8D, 0x1A, 0x00, 0x00, 0x15, 0x40, 0x80, 0x02, 0x15, 0x00, 0x00, 0x00, 0x15,
0x00, 0x00, 0x00, 0x10, 0xF8, 0x94, 0x09, 0x0A, 0x00, 0x7E, 0x01, 0x00, 0x6C, 0x00, 0x06, 0x00,
0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x15, 0xD7, 0x80, 0x0A, 0x15, 0x0A, 0x00, 0x00, 0x15,
0x02, 0x00, 0x00, 0x10, 0x84, 0x94, 0xD5, 0x0A, 0xD6, 0x7E, 0xC5, 0x00, 0x20, 0x00, 0xC2, 0x00,
0xD9, 0x00, 0xCC, 0x8D, 0x20, 0x00, 0x89, 0x15, 0x8E, 0x80, 0x00, 0x15, 0x84, 0x00, 0x89, 0x15,
0x20, 0x00, 0xD5, 0x10, 0xD3, 0x94, 0xD0, 0x0A, 0xC5, 0x7E, 0xDB, 0x00, 0xCE, 0x00, 0xCF, 0x00,
0x8E, 0x00, 0x00, 0x8D, 0x82, 0x00, 0x57, 0x15, 0x2D, 0x80, 0x85, 0x15, 0xCB, 0x00, 0xCF, 0x15,
0xCE, 0x00, 0xD4, 0x10, 0xD2, 0x94, 0xCF, 0x0A, 0xCC, 0x7E, 0xD8, 0x00, 0xCE, 0x00, 0xCF, 0x00,
0xCA, 0x00, 0x20, 0x8D, 0xD3, 0x00, 0xD5, 0x15, 0xCD, 0x80, 0xCD, 0x15, 0xD9, 0x00, 0x8E, 0x15,
0x00, 0x00, 0x83, 0x10, 0xEE, 0x94, 0xC5, 0x0A, 0xCB, 0x7E, 0xCF, 0x00, 0xD2, 0x00, 0xD2, 0x00,
0xC5, 0x00, 0xCB, 0x8D, 0xD4, 0x00, 0xCE, 0x15, 0xD9, 0x80, 0xCA, 0x15, 0x8D, 0x00, 0x88, 0x15,
0x8E, 0x00, 0x00, 0x10, 0x87, 0x94, 0x88, 0x0A, 0x61, 0x7E, 0x20, 0x00, 0x30, 0x00, 0x8E, 0x00,
0x00, 0x00, 0x87, 0x8D, 0xCD, 0x00, 0xC1, 0x15, 0xD3, 0x80, 0xD4, 0x15, 0xC5, 0x00, 0xD2, 0x15,
0x2D, 0x00, 0x88, 0x10, 0x61, 0x94, 0x8E, 0x0A, 0x00, 0x7E, 0x8C, 0x00, 0xD0, 0x00, 0xC1, 0x00,
0xCD, 0x00, 0xD1, 0x8D, 0xD4, 0x00, 0xC9, 0x15, 0x20, 0x80, 0xD7, 0x15, 0x20, 0x00, 0xEF, 0x15,
0xFA, 0x00, 0xF5, 0x10, 0x20, 0x94, 0xF0, 0x0A, 0xF0, 0x7E, 0x8E, 0x00, 0x00, 0x00, 0x8C, 0x00,
0xDC, 0x00, 0xCC, 0x8D, 0xC5, 0x00, 0xCB, 0x15, 0xD4, 0x80, 0xD2, 0x15, 0xCF, 0x00, 0xD0, 0x15,
0xC9, 0x00, 0xD4, 0x10, 0xC1, 0x94, 0xCE, 0x0A, 0xC9, 0x7E, 0xD1, 0x00, 0x8E, 0x00, 0x00, 0x00,
0x83, 0x00, 0xEF, 0x8D, 0xC2, 0x00, 0xD2, 0x15, 0xD9, 0x80, 0xD7, 0x15, 0x20, 0x00, 0xDB, 0x15,
0xCC, 0x00, 0xC5, 0x10, 0xCA, 0x94, 0xC6, 0x0A, 0xC1, 0x7E, 0x8E, 0x00, 0x00, 0x00, 0x81, 0x00,
0x20, 0x00, 0x56, 0x8D, 0x30, 0x00, 0x31, 0x15, 0x2E, 0x80, 0x31, 0x15, 0x30, 0x00, 0x20, 0x15,
0x62, 0x00, 0x79, 0x10, 0x20, 0x94, 0x4F, 0x0A, 0x6C, 0x7E, 0x65, 0x00, 0x67, 0x00, 0x20, 0x00,
0x48, 0x00, 0x2E, 0x8D, 0x1B, 0x00, 0xA7, 0x15, 0x35, 0x80, 0x0A, 0x15, 0x8E, 0x00, 0x00, 0x15,
0x0D, 0x00, 0xF7, 0x10, 0xD2, 0x94, 0xC5, 0x0A, 0xCD, 0x7E, 0xD1, 0x00, 0x20, 0x00, 0xCF, 0x00,
0xD6, 0x00, 0xC9, 0x8D, 0xC4, 0x00, 0xC1, 0x15, 0xCE, 0x80, 0xC9, 0x15, 0xD1, 0x00, 0x2C, 0x15,
0x20, 0x00, 0xD3, 0x10, 0x20, 0x94, 0x8F, 0x0A, 0x39, 0x7E, 0x8B, 0x00, 0x30, 0x00, 0x8A, 0x00,
0x00, 0x00, 0x8E, 0x8D, 0xEE, 0x00, 0xCF, 0x15, 0xCD, 0x80, 0xC5, 0x15, 0xD2, 0x00, 0x8D, 0x15,
0xD2, 0x00, 0xC1, 0x10, 0xDA, 0x94, 0xC4, 0x0A, 0xC5, 0x7E, 0xCC, 0x00, 0xC1, 0x00, 0x8F, 0x00,
0x2F, 0x00, 0x8B, 0x8D, 0x30, 0x00, 0x8A, 0x15, 0x00, 0x80, 0x1B, 0x15, 0xA7, 0x00, 0x36, 0x15,
0x8E, 0x00, 0x00, 0x10, 0x81, 0x94, 0x57, 0x0A, 0x44, 0x7E, 0x52, 0x00, 0x4F, 0x00, 0x4D, 0x00,
0x00, 0x00, 0x3F, 0x8D, 0x81, 0x00, 0x2D, 0x15, 0x00, 0x80, 0x82, 0x15, 0x46, 0x00, 0x2D, 0x15,
0x00, 0x00, 0x82, 0x10, 0x49, 0x94, 0x2D, 0x0A, 0xF2, 0x7E, 0xC5, 0x00, 0xDA, 0x00, 0xC9, 0x00,
0xC4, 0x00, 0xC5, 0x8D, 0xCE, 0x00, 0xD4, 0x15, 0x20, 0x80, 0x00, 0x15, 0xEF, 0x00, 0xDB, 0x15,
0xC9, 0x00, 0xC2, 0x10, 0xCB, 0x94, 0xC1, 0x0A, 0x20, 0x7E, 0x00, 0x00, 0x83, 0x00, 0x85, 0x00,
0x00, 0x00, 0x86, 0x8D, 0xDE, 0x00, 0xD4, 0x15, 0xC5, 0x80, 0xCE, 0x15, 0xC9, 0x00, 0xD1, 0x15,
0x20, 0x00, 0x00, 0x10, 0xC2, 0x94, 0xCC, 0x0A, 0xCF, 0x7E, 0xCB, 0x00, 0x00, 0x00, 0xDA, 0x00,
0xC1, 0x00, 0xC7, 0x8D, 0xD2, 0x00, 0xD5, 0x15, 0xD6, 0x80, 0xC5, 0x15, 0xCE, 0x00, 0x00, 0x15,
0x08, 0x00, 0x1B, 0x10, 0xBF, 0x94, 0xA4, 0x0A, 0x00, 0x7E, 0x29, 0x00, 0x3A, 0x00, 0x20, 0x00,
0x1B, 0x00, 0xA4, 0x8D, 0x00, 0x00, 0x83, 0x15, 0xEE, 0x80, 0xC5, 0x15, 0xD4, 0x00, 0x20, 0x15,
0x00, 0x00, 0x20, 0x10, 0x62, 0x94, 0x6F, 0x0A, 0x6F, 0x7E, 0x74, 0x00, 0x2D, 0x00, 0x00, 0x00,
0x0D, 0x00, 0x0A, 0x8D, 0x00, 0x00, 0x20, 0x15, 0x28, 0x80, 0x30, 0x15, 0x91, 0x00, 0x00, 0x15,
0x00, 0x00, 0x00, 0x10, 0x60, 0x94, 0x90, 0x0A, 0xBB, 0x7E, 0x7A, 0x00, 0x0F, 0x00, 0x8D, 0x00,
0xE6, 0x00, 0x17, 0x8D, 0x2C, 0x00, 0xFE, 0x15, 0xDF, 0x80, 0x17, 0x15, 0x1A, 0x00, 0x00, 0x15,
0x2C, 0x00, 0xFE, 0x10, 0x5F, 0x94, 0x10, 0x0A, 0x56, 0x7E, 0x0E, 0x00, 0xC0, 0x00, 0x97, 0x00,
0x00, 0x00, 0x90, 0x8D, 0x76, 0x00, 0x80, 0x15, 0xC0, 0x80, 0x8C, 0x15, 0x0B, 0x00, 0x81, 0x15,
0xC4, 0x00, 0x15, 0x10, 0x08, 0x94, 0xFE, 0x0A, 0xC5, 0x7E, 0x15, 0x00, 0x0C, 0x00, 0xFE, 0x00,
0xC2, 0x00, 0x15, 0x8D, 0x00, 0x00, 0x00, 0x15, 0x67, 0x80, 0x06, 0x15, 0xCC, 0x00, 0x15, 0x15,
0x33, 0x00, 0x00, 0x10, 0xCD, 0x94, 0x25, 0x0A, 0xE2, 0x7E, 0x00, 0x00, 0x74, 0x00, 0x02, 0x00,
0x37, 0x00, 0x0A, 0x8D, 0x24, 0x00, 0x01, 0x15, 0xCC, 0x80, 0x0A, 0x15, 0x4C, 0x00, 0x13, 0x15,
0x0C, 0x00, 0x0C, 0x10, 0xCC, 0x94, 0xE5, 0x0A, 0x05, 0x7E, 0x00, 0x00, 0x4C, 0x00, 0x13, 0x00,
0x0C, 0x00, 0x0C, 0x8D, 0x43, 0x00, 0x13, 0x15, 0x8C, 0x80, 0x0A, 0x15, 0x41, 0x00, 0x13, 0x15,
0x61, 0x00, 0x81, 0x10, 0x01, 0x94, 0x8A, 0x0A, 0x57, 0x7E, 0x74, 0x00, 0xFA, 0x00, 0xFF, 0x00,
0x57, 0x00, 0x20, 0x8D, 0xFC, 0x00, 0xFF, 0x15, 0x01, 0x80, 0x87, 0x15, 0x51, 0x00, 0x24, 0x15,
0x57, 0x00, 0x20, 0x10, 0xA0, 0x94, 0xF6, 0x0A, 0x57, 0x7E, 0x86, 0x00, 0xC1, 0x00, 0x65, 0x00,
0xA8, 0x00, 0x01, 0x8D, 0x42, 0x00, 0x14, 0x15, 0x40, 0x80, 0x1C, 0x15, 0x04, 0x00, 0x00, 0x15,
0x40, 0x00, 0xE2, 0x10, 0x57, 0x94, 0xA3, 0x0A, 0xFB, 0x7E, 0x00, 0x00, 0x05, 0x00, 0x02, 0x00,
0x8C, 0x00, 0x0A, 0x8D, 0x4C, 0x00, 0x13, 0x15, 0x0C, 0x80, 0x0C, 0x15, 0x0D, 0x00, 0x10, 0x15,
0x4B, 0x00, 0x01, 0x10, 0xCD, 0x94, 0x8B, 0x0A, 0x47, 0x7E, 0x02, 0x00, 0x8C, 0x00, 0x0A, 0x00,
0xC0, 0x00, 0xE0, 0x8D, 0x44, 0x00, 0x87, 0x15, 0x43, 0x80, 0x62, 0x15, 0x42, 0x00, 0x0B, 0x15,
0x97, 0x00, 0x72, 0x10, 0x01, 0x94, 0x00, 0x0A, 0xC1, 0x7E, 0x15, 0x00, 0x06, 0x00, 0x90, 0x00,
0x42, 0x00, 0x0A, 0x8D, 0x89, 0x00, 0x10, 0x15, 0xC2, 0x80, 0x00, 0x15, 0xA1, 0x00, 0x10, 0x15,
0x02, 0x00, 0x0A, 0x10, 0x97, 0x94, 0x72, 0x0A, 0x01, 0x7E, 0x00, 0x00, 0xC2, 0x00, 0x55, 0x00,
0xA0, 0x00, 0x00, 0x8D, 0x42, 0x00, 0x0A, 0x15, 0x43, 0x80, 0x0A, 0x15, 0x83, 0x00, 0x0B, 0x15,
0xA1, 0x00, 0x10, 0x10, 0xDF, 0x94, 0x10, 0x0A, 0x08, 0x7E, 0x90, 0x00, 0x77, 0x00, 0x13, 0x00,
0x44, 0x00, 0x00, 0x8D, 0x37, 0x00, 0x0C, 0x15, 0x40, 0x80, 0x00, 0x15, 0x77, 0x00, 0x09, 0x15,
0xD4, 0x00, 0x00, 0x10, 0xCD, 0x94, 0x12, 0x0A, 0xCB, 0x7E, 0x0B, 0x00, 0xDF, 0x00, 0xFF, 0x00,
0x8C, 0x00, 0x0A, 0x8D, 0x42, 0x00, 0x13, 0x15, 0x46, 0x80, 0x03, 0x15, 0x06, 0x00, 0x80, 0x15,
0x02, 0x00, 0x0B, 0x10, 0x77, 0x94, 0x09, 0x0A, 0xC0, 0x7E, 0x00, 0x00, 0x4B, 0x00, 0x13, 0x00,
0x0B, 0x00, 0x0A, 0x8D, 0xCF, 0x00, 0xFF, 0x15, 0x83, 0x80, 0x10, 0x15, 0xC3, 0x00, 0x65, 0x15,
0xFF, 0x00, 0x00, 0x10, 0x03, 0x94, 0x8A, 0x0A, 0xC3, 0x7E, 0x00, 0x00, 0xC0, 0x00, 0x20, 0x00,
0x03, 0x00, 0x83, 0x8D, 0x03, 0x00, 0x10, 0x15, 0x02, 0x80, 0x10, 0x15, 0xC2, 0x00, 0x00, 0x15,
0x43, 0x00, 0x0A, 0x10, 0xDF, 0x94, 0x10, 0x0A, 0x0A, 0x7E, 0x90, 0x00, 0x5F, 0x00, 0x10, 0x00,
0x00, 0x00, 0x90, 0x8D, 0x2C, 0x00, 0x01, 0x15, 0xCC, 0x80, 0x15, 0x15, 0x00, 0x00, 0x00, 0x15,
0xC3, 0x00, 0x15, 0x10, 0x0E, 0x94, 0x90, 0x0A, 0xC1, 0x7E, 0x97, 0x00, 0x00, 0x00, 0x90, 0x00,
0x3F, 0x00, 0x80, 0x8D, 0x81, 0x00, 0x0C, 0x15, 0x07, 0x80, 0x87, 0x15, 0xF7, 0x00, 0x97, 0x15,
0x0C, 0x00, 0x90, 0x10, 0x4D, 0x94, 0x00, 0x0A, 0xB7, 0x7E, 0x0A, 0x00, 0x48, 0x00, 0x00, 0x00,
0x02, 0x00, 0x0A, 0x8D, 0x1F, 0x00, 0x01, 0x15, 0xC1, 0x80, 0x45, 0x15, 0xDB, 0x00, 0xFF, 0x15,
0x33, 0x00, 0x02, 0x10, 0xC0, 0x94, 0x15, 0x0A, 0x00, 0x7E, 0x01, 0x00, 0x02, 0x00, 0xE0, 0x00,
0x01, 0x00, 0x04, 0x8D, 0x80, 0x00, 0x60, 0x15, 0xC0, 0x80, 0x65, 0x15, 0x03, 0x00, 0x00, 0x15,
0x17, 0x00, 0x76, 0x10, 0xFE, 0x94, 0xFF, 0x0A, 0x57, 0x7E, 0x76, 0x00, 0xF4, 0x00, 0xFF, 0x00,
0xC1, 0x00, 0xE5, 0x8D, 0x0C, 0x00, 0x00, 0x15, 0x47, 0x80, 0xE0, 0x15, 0x00, 0x00, 0x00, 0x15,
0x8C, 0x00, 0x0A, 0x10, 0x00, 0x94, 0x00, 0x0A, 0x8C, 0x7E, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x8C, 0x00, 0x0A, 0x8D, 0x00, 0x00, 0x00, 0x15, 0x8C, 0x80, 0x0A, 0x15, 0x09, 0x00, 0x7E, 0x15,
0x37, 0x00, 0x13, 0x10, 0xAA, 0x94, 0xFF, 0x0A, 0xB7, 0x7E, 0x10, 0x00, 0xD2, 0x00, 0xFE, 0x00,
0xD1, 0x00, 0x06, 0x8D, 0xCC, 0x00, 0x15, 0x15, 0x33, 0x80, 0x00, 0x15, 0xCD, 0x00, 0x15, 0x15,
0x00, 0x00, 0x00, 0x10, 0xCC, 0x94, 0x0A, 0x0A, 0x40, 0x7E, 0x13, 0x00, 0xCC, 0x00, 0x15, 0x00,
0x0A, 0x00, 0x00, 0x8D, 0x41, 0x00, 0x13, 0x15, 0x0D, 0x80, 0x10, 0x15, 0xDF, 0x00, 0x45, 0x15,
0x00, 0x00, 0x80, 0x10, 0xCE, 0x94, 0xFF, 0x0A, 0xDF, 0x7E, 0x55, 0x00, 0x00, 0x00, 0x80, 0x00,
0xCE, 0x00, 0xFF, 0x8D, 0x37, 0x00, 0x0A, 0x15, 0xAC, 0x80, 0xFE, 0x15, 0x4D, 0x00, 0x10, 0x15,
0x02, 0x00, 0x0B, 0x10, 0x02, 0x94, 0x07, 0x0A, 0x00, 0x7E, 0x00, 0x00, 0x82, 0x00, 0x7E, 0x00,
0x9F, 0x00, 0x15, 0x8D, 0x2C, 0x00, 0xFE, 0x15, 0xC1, 0x80, 0x17, 0x15, 0x56, 0x00, 0x0E, 0x15,
0x0F, 0x00, 0x8D, 0x10, 0x5F, 0x94, 0x00, 0x0A, 0x74, 0x7E, 0xF8, 0x00, 0x77, 0x00, 0x13, 0x00,
0xA4, 0x00, 0xFF, 0x8D, 0x77, 0x00, 0x13, 0x15, 0xA4, 0x80, 0xFF, 0x15, 0x77, 0x00, 0x13, 0x15,
0xA4, 0x00, 0xFF, 0x10, 0x77, 0x94, 0x15, 0x0A, 0xA4, 0x7E, 0xFF, 0x00, 0x77, 0x00, 0x15, 0x00,
0xDA, 0x00, 0xFF, 0x8D, 0x41, 0x00, 0x15, 0x15, 0x85, 0x80, 0x00, 0x15, 0x20, 0x00, 0x57, 0x15,
0x72, 0x00, 0x69, 0x10, 0x74, 0x94, 0x74, 0x0A, 0x65, 0x7E, 0x6E, 0x00, 0x20, 0x00, 0x62, 0x00,
0x79, 0x00, 0x20, 0x8D, 0x4F, 0x00, 0x6C, 0x15, 0x65, 0x80, 0x67, 0x15, 0x20, 0x00, 0x48, 0x15,
0x2E, 0x00, 0x20, 0x10, 0x28, 0x94, 0x63, 0x0A, 0x29, 0x7E, 0x20, 0x00, 0x4D, 0x00, 0x61, 0x00,
0x79, 0x00, 0x2C, 0x8D, 0x20, 0x00, 0x31, 0x15, 0x39, 0x80, 0x39, 0x15, 0x37, 0x00, 0x3B, 0x15,
0x20, 0x00, 0x6F, 0x10, 0x6C, 0x94, 0x65, 0x0A, 0x67, 0x7E, 0x68, 0x00, 0x40, 0x00, 0x6E, 0x00,
0x65, 0x00, 0x6D, 0x8D, 0x6F, 0x00, 0x2E, 0x15, 0x61, 0x80, 0x6E, 0x15, 0x6B, 0x00, 0x65, 0x15,
0x79, 0x00, 0x2E, 0x10, 0x72, 0x94, 0x75, 0x0A, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x15, 0x00, 0x80, 0x00, 0x15, 0x00, 0x00, 0x00, 0x15,
0x00, 0x00, 0x00, 0x10, 0x00, 0x94, 0x00, 0x0A, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x15, 0x00, 0x80, 0x00, 0x15, 0x00, 0x00, 0x00, 0x15,
0x00, 0x00, 0x00, 0x10, 0x00, 0x94, 0x00, 0x0A, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};


PS2 mouse(CLOCK_PIN, DATA_PIN);
volatile bool s = true; // мышь разблокирована
volatile char mstat;
volatile char x;
volatile char y;


void setup() {
pinMode(SELECT3, INPUT_PULLUP);
pinMode(SELECT4, INPUT_PULLUP);
pinMode(8, OUTPUT); //LED
pinMode(RPLY, INPUT);
pinMode(VA87DIR, INPUT);
pinMode(DIN, INPUT);
pinMode(ADDREQ, INPUT);
digitalWrite(RPLY, LOW);
digitalWrite(VA87DIR, LOW);
digitalWrite(DIN, LOW);
digitalWrite(ADDREQ, LOW);
DDRA = B00000000;
DDRB = B00000000;
delay(1000);
digitalWrite(8, LOW); //led on
delay (100);
digitalWrite(8, HIGH); //led off
delay (100);
attachInterrupt(1, readrom, FALLING);
mouse_init();
attachInterrupt(0, readmouse, FALLING);
}

void loop() {
if (s) {
mouse.write(0xeb); // команда на чтение данных
mouse.read(); // игнорируем ack
mstat = mouse.read();
x = mouse.read(); //x
y = mouse.read(); //y
if ((bit_is_set(mstat, 5)) && (bit_is_clear(y,7))) y = -63;
if ((bit_is_clear(mstat, 5)) && (bit_is_set(y,7))) y = 63;
if ((bit_is_set(mstat, 4)) && (bit_is_clear(x,7))) x = -63;
if ((bit_is_clear(mstat, 4)) && (bit_is_set(x,7))) x = 63;
if (x > 63) x = 63; //обрезка по переполнению
if (x < -63) x = -63;
if (y > 63) y = 63;
if (y < -63) y = -63;
x = x<<1;
y = y<<1;
if (bit_is_set(mstat, 0))// left button
{
bitSet(y, 0);
}else{
bitClear(y, 0);
}
if (bit_is_set(mstat, 1))// right button
{
bitSet(x, 0);
}else{
bitClear(x, 0);
}
noInterrupts();
PORTA = x; //пишем результат в порт
PORTB = y;
s = false; //блокировка чтения мыши
interrupts();
delayMicroseconds(2000);
}
}

void mouse_init()
{
mouse.write(0xFF); // reset
mouse.read(); // ack byte
mouse.read(); // blank */
mouse.read(); // blank */
mouse.write(0xF0); // remote mode
mouse.read(); // ack
mouse.write(0xF4); // Enable Data Reporting
mouse.read(); // ack
mouse.write(0xF3); // Set Sample Rate
mouse.read(); // ack
mouse.write(0xC8); // Set Sample Rate 200
mouse.read(); // ack
mouse.write(0xE8); // Set Resolution
mouse.read(); // ack
mouse.write(0x03); // Set Resolution 8
mouse.read(); // ack
//mouse.write(0xE7); // Set Scaling 0xE7 - 2/1 0xE6 - 1/1
//mouse.read(); // ack
//mouse.write(0xE9); // Status Request
//mouse.read(); // ack
//PORTA = mouse.read(); // Status
//PORTB = mouse.read(); // Resolution
//mouse.read(); // Sample Rate
delayMicroseconds(200);
}

void readrom() //чтение слова из кассеты
{
noInterrupts();
if (bitRead(PIND, 6))//va87dir проверка конфликта
{
bitSet(DDRC, 7); //addreq запрос адреса в ПЛИС
uint16_t index = PINA;
index = PINB; // дополнительное чтение
index = ((PINB*256)|PINA)-32768; //вычисление индекса
bitClear(DDRC, 7); //addreq
if (!bitRead(PIND, 4))//din проверка чтения
{
PORTA = pgm_read_byte(&data[index]); //чтение из flash младшего байта
PORTB = pgm_read_byte(&data[++index]); //чтение из flash старшего байта
bitSet(DDRD, 6); //va87dir переключение буфера на передачу
DDRA = B11111111; //переключить порт на вывод
DDRB = B11111111; //переключить порт на вывод
bitSet(DDRD, 7); //включение rply
while (!bitRead(PIND, 4)); //din ожидание получения процессором rply
bitClear(DDRD, 6); //va87dir переключение буфера на прием
bitClear(DDRD, 7); //выключение rply
DDRA = B00000000; //переключить порт на ввод
DDRB = B00000000; //переключить порт на ввод
}
}
interrupts();
}

void readmouse()
{
noInterrupts();
if (!bitRead(PIND, 4))//DIN
{
bitSet(DDRD, 6); //va87dir
DDRA = B11111111;
DDRB = B11111111;
bitSet(DDRD, 7); //rply
while (!bitRead(PIND, 4));
bitClear(DDRD, 6); //va87dir
bitClear(DDRD, 7); //rply
DDRA = B00000000;
DDRB = B00000000;
PORTA = PORTA & B00000001; //очистка порта
PORTB = PORTB & B00000001;
s = true; //мышь разблокирована
}
interrupts();
}

Так же готовый файл прошивки для Атмеги32.
81041
FUSES: High Byte = C7 Low Byte = 3F

Гербер на данную модификацию выкладывать не буду, т.к. там слишком много ошибок. Позже выложу новую исправленную версию.

Данный контроллер продается на БАРАХОЛКЕ (https://zx-pk.com/forum/viewtopic.php?f=7&t=24036).

Xrust
01.09.2024, 16:52
81200
Обновленная прошивка для Altera EPM7128 для контроллера Какаве+IDE+Mouse. Повышена совместимость с различными устройствами IDE.

Xrust
11.12.2024, 23:38
Версия платы контроллера с разъемами IDE 40 и IDE 44.

https://pic.maxiol.com/thumbs2/1733949110.1734555019.photo2024110800162.jpg (https://pic.maxiol.com/?v=1733949110.1734555019.photo2024110800162.jpg&dp=2)

81665
81832

Внимание! В схеме был обозначен неверный тип микроконтроллера. Верно - Atmega324. Выложена исправленная версия схемы.
Atmega32 применялась в предыдущих версиях контроллера. К сожалению, у этого МК недостаточно входов с прерываниями, для реализации всех функций этой платы.
Более подробное описание устройства можно найти здесь (https://oshwlab.com/yrust/uknz_kakave_mouse_rtc_ide).

Модели для корпуса для DOM IDE-44.

https://pic.maxiol.com/thumbs2/1733949417.1734555019.photo2024112916105.jpg (https://pic.maxiol.com/?v=1733949417.1734555019.photo2024112916105.jpg&dp=2)

81667

BlaireCas
17.01.2025, 06:39
Если что - эксклюзивно для винта УКНЦ появилась демка Bad Apple :v2_dizzy_roll: (да уж, где только эта демка не появлялась).
Сам репозиторий: https://github.com/blairecas/badapple/
В репозитории есть немного подправленный эмулятор для показа демки (уменьшены задержки перед чтением сектора с кажется 512 до 8, добавлен режим LBA28). Реальный железный винт вполне тоже тянет демку, немного видео вот тут: https://github.com/blairecas/badapple/blob/main/screenshots/bappwd_1.mp4?raw=true

Небольшой отзыв по винтам УКНЦ (использовал какаву от Xrust):
1) не все IDE флешки работоспособны особенно с дефолтным драйвером от Олега Ховайко. Например IDE DOM-модуль от Apacer на 2G работает без каких-либо нареканий, он довольно пофигистический в плане того что даже не особо требует проверки всяких битов DRQ, BSY итд - успевает зачастую сделать всё до того как медленная УКНЦ начнет читать данные после команды "читать сектора". А вот некая CF-карта начала требовать добавления команды flush cache (0xE7) в драйвер после записи секторов - иначе получалась кривота, вроде-бы работает, но читает не всегда то что пишет.
2) железный винт от ноутбука вроде бы заработал и с дефолтным драйвером (хотя в итоге я все-равно сделал свой, также добавив этот flush cache на всякий пожарный)
3) В резиденте WDR.SAV (во всяком случае в одной из его версий) вроде как есть косяк с проверкой битов DRDY+DRQ перед чтением/записью сектора (проверяет не тот бит). Это может повлиять на первоначальную разметку винта когда с него еще нельзя загружаться и надо грузиться с дискеты и инициализировать винчестер. Каким-то флешкам на это пофиг (тот-же apacer). Посему можно порекомендовать (для тех флешек которым не пофиг) делать образ винта в эмуляторе, записать на винт чем-нибудь (dd в линуксе, winhex в винде итд). А вот в коде ПЗУ контроллера винта всё нормально, проверяется уже ТОТ бит, там всё окей - то-есть при запуске с кассеты ПЗУ - резидент в периферийном процессоре будет правильный.
4) .. работа в РТ-11 с винта радует скоростью (внезапно ага :) после дисковода