- А можно ее в кодах?
Вид для печати
Если присмотреться внимательнее - коды там есть ( на месте комментариев ).
Глюк...
Останов с адресом 01026 - признак того, что на момент начала работы программы - контроллер не имеет признака готовности, т.е. не установлен бит 040 в регистре 176730.
При останове по адресу 01026 нужно вручную открыть 176730 и убедиться, что там установлен бит 040 - и только затем нажать "P"
@10/010021
000012/077202
000014/000000
@R0/000777
R1/000016
R2/000000
@10G 000000
@R1/160002
010054/000777
010056/000777
@20000/000777
020002/000777
020004/000777
@1000/005000
001002/012701
001004/020000
001006/012702
001010/176730
001012/012703
001014/176732
001016/032712
001020/000040
001022/001001
001024/000000
001026/111304
001030/023737
001032/000240
001034/000240
001036/012713
001040/000007
001042/023737
001044/000240
001046/000240
001050/012712
001052/000001
001054/032712
001056/000040
001060/001775
001062/032712
001064/000010
001066/001406
001070/111304
001072/100401
001074/000000
001076/006204
001100/103001
001102/000000
001104/012713
001106/000002
001110/012712
001112/000001
001114/032712
001116/000060
001120/001006
001122/032712
001124/000010
001126/001772
001130/111321
001132/005200
001134/000767
001136/000000
001140/000777
@
@
@
@
@176730/000054
176732/000066
176734/
BUS ERROR
@176730/000044
176732/000066
176734/
BUS ERROR
@176730/000044
176732/000066
176734/
BUS ERROR
@176730/000044
176732/000066
176734/
BUS ERROR
@176730/000044
176732/000066
176734/
BUS ERROR
@
@1000G 001076
@
@1000G 001076
@
@1000G 001076
@
@176732/000066
@176730/000040
@176730/000040
176732/000066
176734/
BUS ERROR
@
@176730/000040
176732/000066
176734/
BUS ERROR
@P 001140
@
@176730/000044
176732/000066
176734/
BUS ERROR
@176730/000044
176732/000066
176734/
BUS ERROR
@
@
@
@176730/000044
176732/000066
176734/
BUS ERROR
@
@
@
@1000G 001076
@176730/000040 1 (Прочитал ленту)
@20000/000777
@P 001140 (Записал блок из памяти контроллера в память)
@20000/000001
020002/000666
020004/000666
020006/000666
---------- Post added at 04:00 ---------- Previous post was at 03:52 ----------
@176730/000044
176732/000203 00
@176730/000040 1
@
@176730/000054
176732/000203
176734/
BUS ERROR
@
@
@
@
@176730/000044
176732/000203 0
@176730/000040 1
@
@1000G 001076
@176732/000066
@176730/000040
176732/000066
176734/
BUS ERROR
@
@176730/000040
176732/000066
176734/
BUS ERROR
@R0/000000
R1/020000
R2/176730
R3/176732
R4/000066
R5/000030
R6/177776
R7/001076
R0/000000
@
Останов по адресу 01076 - это всё та же проблема, решить которую пока не помогло ни чтение регистра 176732 перед записью в него, ни вставка команды Cmp @#240,@#240 ( для дополнительной задержки ) между записью "7" в регистр 176732 и "1" в 176730.
Однако, теперь у нас есть место в коде, чтобы вставить ещё одну команду записи "1" в 176730.
Код:001024/000000
001026/111304
001030/023737
001032/000240
001034/000240
001036/012713
001040/000007
001042/023737 / 012712
001044/000240 / 000001
001046/000240
001050/012712
001052/000001
001054/032712
001056/000040
001060/001775
@176730/000054
176732/000066
176734/
BUS ERROR
@
@176730/000044
176732/000066
176734/
BUS ERROR
@
@1000G 001076
@
@1000G 001076
@176730/000040
176732/000066
176734/
@176730/000040
176732/000066
176734/
@P 001140 (Ленту не прочитал)
@
@20000/000777
@1000G 001076
@
@R0/000000
R1/020000
R2/176730
R3/176732
R4/000066
R5/000030
R6/177776
R7/001076
@176730/000040
176732/000066
@176730/000040
176732/000066
@176730/000040 1 (Прочитал ленту)
@
@20000/000777
@P 001140 (Скопировал буфер контроллера в память)
@20000/000001
020002/000666
020004/000666
---------- Post added at 13:22 ---------- Previous post was at 13:10 ----------
@20000/000777
020002/000777
020004/000777
020006/000777
@1042/012712
001044/000001
001046/000240 0 (Меняем NOP на Halt)
@
@
@1000G 001050
@P 001140 (Прочитал ленту)
@
@20000/000004
020002/000666
020004/000666
020006/000666
@
- Похоже надо выставить задержку в 1046
---------- Post added at 13:29 ---------- Previous post was at 13:22 ----------
@1042/000000
001044/000240
001046/000240
@20000/000777
020002/000777
020004/000777
@
@
@1000G 001044
@P 001140
@
@20000/000002
020002/000666
020004/000666
020006/000666
@
Похоже второй раз записывать 1 в 176730 не надо, нужно просто
выставить больше задержку...
---------- Post added at 13:38 ---------- Previous post was at 13:29 ----------
Так, увеличиваем задержку:
@1042/012705
001044/123456
001046/077501
@
@20000/000777
020002/000777
020004/000777
@
@1000G 001140 (Прочитал ленту) :)
@
@20000/000004
020002/000666
020004/000666
020006/000666
@
---------- Post added at 13:40 ---------- Previous post was at 13:38 ----------
Итак, код рабочей программки чтения:
@
@1000/005000
001002/012701
001004/020000
001006/012702
001010/176730
001012/012703
001014/176732
001016/032712
001020/000040
001022/001001
001024/000000
001026/111304
001030/023737
001032/000240
001034/000240
001036/012713
001040/000007
001042/012705
001044/123456
001046/077501
001050/012712
001052/000001
001054/032712
001056/000040
001060/001775
001062/032712
001064/000010
001066/001406
001070/111304
001072/100401
001074/000000
001076/006204
001100/103001
001102/000000
001104/012713
001106/000002
001110/012712
001112/000001
001114/032712
001116/000060
001120/001006
001122/032712
001124/000010
001126/001772
001130/111321
001132/005200
001134/000767
001136/000000
---------- Post added at 13:45 ---------- Previous post was at 13:40 ----------
С задержкой понятно, этот контроллер работал на Эл.60,
а теперь на ВМ2 поэтому и не успевает обработать команду...
Думаю, что вместо задержки можно попробовать использовать бит 04 регистра 176730. Этот бит сбрасывается, когда контроллер готов к выполнению кода команды, записанного в 176732 ( т.е. в тот момент, когда нужно записывать "1" в 176730 ). После записи кода команды в 176732 можно вставить проверку сброса этого бита и не записывать "1" в 176730 до тех пор, пока бит 04 в 176730 установлен.
Код:001042/023737 / 032712
001044/000240 / 000004
001046/000240 / 001375
@1042/012705 032712
001044/123456 4
001046/077501 1375
@
@1000G 001076
@
@176730/000040
176732/000066
- Нет, так не читает...
---------- Post added at 08:06 ---------- Previous post was at 08:05 ----------
@1042/032712 12705
001044/000004 123456
001046/001375 77501
@
@
@1000G 001140
@
@20000/000002
020002/000666
020004/000666
020006/000666
@
- А так читает...
---------- Post added at 09:15 ---------- Previous post was at 08:06 ----------
- Скорее всего надо просто выдерживать паузу после записи команды
в 176732....
---------- Post added at 09:16 ---------- Previous post was at 09:15 ----------
В принципе читать получилось, надо-бы разобраться как писать... :)
Делать паузу в 1000 раз более длинной, чем это необходимо - не всегда оправдано. Гораздо лучше (на мой взгляд) иметь универсальный алгоритм, который в любых условиях даёт гарантированный результат c минимальной задержкой.
Поэтому, предлагаю попробовать следующий вариант:
Думаю, нет смысла заниматься записью до тех пор, пока драйвер TP.SYS для RT-11 ( который ещё нужно написать ) не начнёт нормально читать ленты.Код:001024/000000
001026/111304
001030/023737 / 012713
001032/000240 / 000007
001034/000240 / 032712
001036/012713 / 000004
001040/000007 / 001375
001042/012705 / 012712
001044/123456 / 000001
001046/077501 / 022712
001050/012712 / 000040
001052/000001 / 001773
001054/032712
001056/000040
001060/001775
Мне представляется, что следующим шагом должно стать исследование работы контроллера при чтении стандартной разметки ленты ( блок VOL1, блок HDR1, метка "Tape Mark", блоки данных, метка "Tape Mark", блок EOF1, метка "Tape Mark" ).
Весьма важно ( на мой взгляд ) выяснить, как контроллер сигнализирует о том, что вместо ожидаемого заголовка блока на ленте попался "Tape Mark". Не зная этого - невозможно отличить блок данных файла от метки конца файла ( метка конца файла по своей сути - это точно такой же блок данных ).
Для этого тестирования программу нужно модифицировать так, чтобы она подавала только команду "2" и копировала буфер контроллера в компьютер, а команда "7" подавалась вручную. Это даст возможность после каждой команды "7" проверять содержимое регистров 176730 и 176732, чтобы определить те биты, которые контроллер устанавливает там при обнаружении на ленте различных меток.
Затем нужно взять ленту, содержащую файлы RT-11 и пройтись по ней, выдавая вручную команды "7" и проверяя регистры.
Запуская программу копирования буфера в компьютер - нужно прежде всего проверять значение R0, где возвращается число скопированных байт. Для блоков по 512 байт это должно быть число 514 ( 2 байта номера блока + 512 байт данных ).
Давайте продолжим эксперименты с контроллером? :)
Думаю, что исследовать собственные форматы контроллера, которые он использует для записи/чтения данных - малоперспективно, т.к. отсутствует эталон для сравнения и мы просто не знаем, что именно должно писаться и читаться в этих режимах.
Если же поставить целью научиться читать и писать стандартные блоки данных, то (наверное) нужно записать на обычном контроллере тестовую ленту с точно известным содержимым блоков, а затем научиться читать её при помощи исследуемого контроллера.
...
P.S. Предлагаю также провести эксперимент по первой в мировой истории загрузке RT-11 в ДВК через telnet-интерфейс, с последующей работой блочного обмена системного устройства через терминальное telnet-подключение.
Документация на СМ5300.(если актуально)
http://www.tiffe.de/Robotron/CM5300/
Может вернемся к теме оживления контроллера? На чем записать тестовую ленту есть...
А если я выпаяю ПЗУ из этого контроллера и считаю его? Это как-то поможет?
По идее кроме ПЗУ еще схема нужна, особенно того узла который формирует сигналы для самого накопителя. Тогда суть работы контроллера можно будет както смоделировать в Proteus.
Интересно что для таких схем, а это по сути DSP высоких частот, обычно применялись секционированные процы. В военке как правило (про что свидетельствует литература затрагивающая серии 1800 1802 1804) да и в других контроллерах от pdp11. А тут применен достаточно медленный i8080 поэтому возникает вопрос или там плотность записи низкая или какая-нибудь хитрость есть... НО и "хитрости" на самой плате не видно, там где есть "хитрость" микросхем ставят гораздо больше, примеры это КЖД на 8x300 1818вм01 или RQDX1/2/3 на t11 с ихними огромными схемами с кучей регистров и автоматами состояний.
Давайте продолжим эксперименты с контроллером?
Давайте. Никто не против.
Если интересно, есть страничка тестирования НМЛ.
Это у контроллеров HDD по сути DSP высоких частот. А частота следования символов с НМЛ, максимум, 64 кГц. Это у больших НМЛ с большими катушками, вакуумными карманами и скоростью 2м/с, которых в СМ-овской номенклатуре просто не было. А у 5300, которыми укомплектовано большинство СМ-ок, всего 10 кГц, тут кто угодно справится, кроме Э-60 в родном виде, и то только из-за регенерации - поставь ей статическую память, и вперед! Это при использовании основного метода записи 800NRZ с его плотностью 800 импульсов на дюйм (32 имп/мм). В принципе, существует еще метод 1600PE, (Phase Encoding), позволяющий на том же оборудовании (в смысле НМЛ) и на чуть лучших по качеству лентах получить 1600 символов на дюйм (64 на мм), это нечто из той же оперы, что и применение MFM вместо FM. Только вот ни разу не видел у нас устройств внешней памяти на магнитных лентах с применением этого метода записи, только читал в описании Системы-360. Я даже не знаю, были ли подобные контроллеры НМЛ у DEC ?
- - - Добавлено - - -
Прочитал всю тему. Забавный контроллер. В общем, ребята молодцы, сочинили правильную вещь, именно так и надо делать контроллер для НМЛ 5300. Их, правда, не хватило довести его до стандартного МТ, т.е. использовать интерфейс, который изучался на протяжении 13 страниц этой темы, не как основной, а как промежуточный, а для обмена с МПИ использовать отдельный контроллер, который для ЦП прикинется нормальным МТ:, а с МЛ будет взаимодействовать через этот самый интерфейс, объявленный промежуточным.
Для работы с НМЛ был выбран самый доступный в наших широтах процессор тех времен - КР580ВМ80, и тогда это было правильно. Сейчас же с этим справится любая АТмега с достаточным количеством ног, например, АТмега64, которую можно купить в любой лавке (почти) в любой точке земного шара. Поэтому, ИМХО, имеет смысл прекратить мучительные исследования неизвестного контроллера с малой практической ценностью и сочинить свой. Во-первых, на плате он займет 1/4, а то и 1/6 "половинки", все остальное можно отдать под что-то еще, в том числе и под нормальный MT-подобный согласователь с МПИ, чтобы любая ОСь PDP-11 воспринимала его, как обычное устройство МТ.
Причем задача эта не то, чтобы сильно сложная. Первая ее часть - склепать подобный контроллер на современном МК общего назначения уже имеет, практически, все, что нужно для ее реализации - Патрон уже полностью (или почти полностью) выяснил все особенности записи и чтения 9-дорожечной МЛ, интерфейс 5300 подробно описан в его руководстве, так, что можно работать. В принципе, первую часть можно клепать даже не привязываясь к ДВК/Э-60, например, прицепив его к компорту писюка, на скорости 115200 это вполне реально.
Плюсы этого дела: (1) не надо выяснять, что там насочиняли авторы того изделия, что сочиним сами, то и будет; (2) поведение новой железки будет известно до каждого бита и каждого такта и (3), как я уже говорил, оно займет очень мало места на плате итогового изделия, так, что туда, кроме него и модуля МПИ запросто влезет что-нибудь еще.
Тема заглохла? Никто не пытается повторить контроллер? Хотелось бы подключить СМ5300.01 к ДВК. но мне с этим точно не справиться..
- - - Добавлено - - -
И купить же контроллер нереально?
Повторить мои контроллеры то можно попробовать, только смысл? Они же не стандартные..
понятно. А стандартные есть?
Стандартный - это здоровенный ящик с кучей плат, от которого идут шнурки к НМЛ и к адаптеру, вставляемому в Э-60/ДВК. Или даже шурок с МПИ, точно уже не помню.
Ходили еще самопалы от новосибирского СКБ НП, на "половинке" (на секционных микропроцессорах 1804, во девичестве Am2900, если не врет мой склероз), но они, скорее всего, давно все сдохли и восстановлению не подлежат. Так, что "при наличии отсутствия" этого ящика, единственный доступный вариант - взять многоногий микроконтроллер и сваять аналог этого ящика на нем. Особых сложностей там быть не должно, но работы много.
Нет, был, вроде-бы, вариант для МПИ. 15ВУМС же встречались с НМЛ?..
Вот как всё оказалось сложно. А я прикупил как раз накопитель.. Самопал на микроконтроллере мне не осилить.. Вот бы кто взялся.. Я бы материально поучавствовал..
Да, все верно, И кабель именно МПИ. Такой то есть, только вот делать его реплику нет смысла. И у меня на него схем нет. А доки есть.
Ну пусть будут самопалы, не важно, главное чтоб адрес на шине и команды соответствовали стандартному.
У меня есть парочка, но они не стандартные по адресам. Один на полной плате с адресом 170002, таких больше было, и драйвер есть. Но контроллер глючит по записи.
и еще один на полу-плате, тот вообще не стандартный, известно только несколько команд и драйвера нет..
Так что пока реплику не с чего делать..
- - - Добавлено - - -
МПИ, полу-плата K2, со шлейфом из корзины Эл.60 к такой-же полу-плате К2 но уже в корзину НМЛ..
У меня есть две полноразмерных платы К01 и К02. Одна из них - контроллер для СМ5400, другая - для СМ5300.
Но я с ними еще не разбирался и непонятно когда руки дойдут.
Также есть контроллер для СМ5400 и СМ5300 в составе Искра-226. Но тоже пока ждут своей очереди.
Во.. немного задвигалось :)
Могу посоветовать радикально пропатчить новодел КМД-МУ, со сменой 1801ВП1-128 на парочку 580ВВ55, и по программной части типа такого.
Адрес на МПИ тоже сменить ( это не сложно ).
В основном главная задача будет - это согласование стоимости софта, и поиск писателя.
Я плохо помню MT на Э60, но вроде был просто контроллер и с него сразу магнитофон.
К слову, тот контроллер, что в старте темы фигурирует при ближайшем рассмотрении кажется стандартным контроллером, посаженным за некий мост который ему передает команды. Контроллер берет параметры из памяти, но этот блок в памяти совпадает с обычным значением регистров стандартного контроллера...
form, может и глупый вопрос - может как то можно помеять адреса и регистры в контроллере , которые есть у андрея на какие то стандартные - и повторить плату
У него совсем другой принцип - два регистра через которые передается блок памяти, а уже этот блок памяти хранит то, что в стандартном контроллере раскладывается по разным регистрам.
Кстати в нем еще ошибка была в - он иногда выдает прерывания когда не должен (и судя по коду разбиравшейся прошивки, это известная проблема).