PDA

Просмотр полной версии : Контроллер НМЛ СМ5300.01



Andrey_Ak
17.03.2011, 08:34
Собственно имеется два одинаковых не стандартных контроллера НМЛ СМ5300.01
Запустить их под RT11 не удалось, ну это собственно и понятно,
не получается даже выяснить команды данных контроллеров.

Вот фото контроллеров:

http://www.tis.kz/large/IMG_5300-5.jpg
http://www.tis.kz/large/IMG_5300-03.jpg

Контроллеры имеют адреса 176730 и 176732
работали они в составе комплекса МОЛ-601, на базе Эл.60,
в которой стояло ПЗУ с программой управления комплекса,
в программе управления НМЛ с данными контроллерами отвечает
на команды, читает свои ленты, и т.д. Точные команды не известны.

Требуется помощь, разобраться как работают данные контроллеры,
выяснить команды, протестировать, и потом уже можно будет написать
драйвер для них...

Кто сможет до ума довести один контроллер, чтоб с ним можно было бы нормально работать?

---------- Post added at 11:08 ---------- Previous post was at 11:05 ----------

Образ ПЗУ с программой управления был снят на дискету,
и его можно запустить с эмуляторе.
http://www.tis.kz/files/Boot_PDPC_Mol-601.rar

---------- Post added at 11:09 ---------- Previous post was at 11:08 ----------

Краткая инструкция по загрузки ПЗУ комплекса "МОЛ-601" в эмуляторе

1) Запустить эмулятор для загрузки с образа дискеты

PDPC.COM LDROM.DSK

2) После загрузки системы в эмуляторе, запустить программку "LDROM.SAV" для
загрузки образа ПЗУ "ROM.BIN" в память с адреса 000000 - 077777

LDROM.SAV

3) Несколько команд в программе ПЗУ комплекса "МОЛ-601" по работе с НМЛ СМ5300 и КНМЛ СМ5211:

*REW/IST:TP - Перемотка на начало ленты
*DIR/IST:TP - Вывод меток маршрутов
*FSR/IST:TP - Шаг на блок вперед
*BSR/IST:TP - Шаг на блок назад
*FSF/IST:TP - Шаг на файл вперед
*BSF/IST:TP - Шаг на файл назад

---------- Post added at 11:34 ---------- Previous post was at 11:09 ----------

Вот некоторые тесты:
http://zx.pk.ru/showpost.php?p=221949&postcount=629

Mick: Народ! Продажа, дарение, купля и обмен у нас в барахолке. Следующий раз просто тема будет удалена.

Patron
17.03.2011, 14:09
На мой взгляд - для изучения кода ПЗУ есть смысл использовать дизассемблер IDA. Там есть модуль процессора PDP-11, который можно самостоятельно модифицировать.

В приложении - модуль процессора 1801ВМ1 для дизассемблера IDA Pro 32 ( использовался IDA SDK v5.2 (http://www.woodmann.com/crackz/Ida/Idasdk52.zip) ).

...
ОБНОВЛЕНИЕ: 12.01.13 (http://zx.pk.ru/attachment.php?attachmentid=39302)

1. Исправлен баг дизассемблирования команды XOR у модулей дизассемблера 1801VM1 и pdp11 для IDA Pro v5.2
2. Добавлен исправленный модуль дизассемблера pdp11 для IDA Pro v5.0

...

ДОБАВЛЕНИЕ: 31.12.14 (http://zx.pk.ru/attachment.php?attachmentid=50459)

1. Добавлен модуль процессора 1801ВМ2 для дизассемблера IDA Pro 32 v5.2

...

Andrey_Ak
17.03.2011, 14:23
На мой взгляд - для изучения кода ПЗУ есть смысл использовать дизассемблер IDA. Там есть модуль процессора PDP-11, который можно самостоятельно модифицировать.

В приложении - модуль процессора 1801ВМ1 для дизассемблера IDA.

- И как этим пользоваться?

Patron
17.03.2011, 14:41
- И как этим пользоваться?
1. На этой страничке (http://rutracker.org/forum/viewtopic.php?t=524500) ( или где-то ещё ) добыть и установить ida52pro_setup.exe ( 68'101'793 byte ).
2. Скопировать файл 1801VM1.w32 в каталог "IDA\procs\".
3. Запустить IDA Pro 32.

Andrey_Ak
17.03.2011, 15:30
1. На этой страничке (http://rutracker.org/forum/viewtopic.php?t=524500) ( или где-то ещё ) добыть и установить ida52pro_setup.exe ( 68'101'793 byte ).
2. Скопировать файл 1801VM1.w32 в каталог "IDA\procs\".
3. Запустить IDA Pro 32.

- Поковырялся с ним, так и не разобрался... :(

Patron
17.03.2011, 16:36
У меня последовательность дизассемблирования кода ПЗУ выглядит так:

1.
http://s4.hostingkartinok.com/uploads/images/2012/10/35f6c3983d8b74f2790b7f271bd0af77.png

- Нажимаю кнопку [ New ]

2.
http://s1.hostingkartinok.com/uploads/images/2012/10/af8212ff495a6bf5ec5d4044f100cfb8.png

- Выбираю закладку [ Embedded ]

3.
http://s1.hostingkartinok.com/uploads/images/2012/10/e3b2fbb7fc2674946a001088571fbb4b.png

- Выбираю [ ROM Image ]

4.
http://s4.hostingkartinok.com/uploads/images/2012/10/bdee8b0ff5ef056d3f27b9dfa5ea0b94.png

- Выбираю [ ROM.BIN ]

5.
http://s1.hostingkartinok.com/uploads/images/2012/10/86cef7803f0e14abead8bece6067bc88.png

- Нажимаю [ Далее ]

6.
http://s4.hostingkartinok.com/uploads/images/2012/10/0759135ccd8702cf8b46f8efa4eb60ee.png

- Выбираю [ DEC series: 1801VM1 ], нажимаю [ Далее ], затем нажимаю [ Готово ].

7.
http://s4.hostingkartinok.com/uploads/images/2012/10/a326da7569e0f6cdbcfdbcae711cb9d9.png

Добавляю секцию ОЗУ:

http://s1.hostingkartinok.com/uploads/images/2012/10/be91cf89575ca0eecd37ab38e7d35db1.png

- Нажимаю [ OK ]

8.
http://s1.hostingkartinok.com/uploads/images/2012/10/e6c429d1b3d215d7db58563d72ec8746.png

Дважды нажимая <D> на каждой строчке кода - переделываю тип данных секции векторов:

http://s1.hostingkartinok.com/uploads/images/2012/10/1480421a2aa25f034ab4d627841b486d.png

http://s4.hostingkartinok.com/uploads/images/2012/10/96a712ae65163b1fb84f1c8b53aa2120.png

Код начинается с адреса 0400 - выделяю несколько строк и, нажав правую кнопку мыши - выбираю [ Analyze selected area ].

http://s1.hostingkartinok.com/uploads/images/2012/10/8aeb7306778e0a66631a1776f84e2734.png

Andrey_Ak
17.03.2011, 20:38
Интересно...

Но в дизассемблерном коде еще нужно найти нужные куски кода,
который общается с НМЛ... А это как определить?

Может Вы попробуете?

Patron
17.03.2011, 22:12
Помочь я не против, но сделать это прямо сейчас ( при помощи моего эмулятора ДВК-1 ) мешает команда Div #10., R4, расположенная в ПЗУ по адресу 074022 ( нужно добавить эмуляцию команд EIS ).

Andrey_Ak
17.03.2011, 22:16
Помочь я не против, но сделать это прямо сейчас ( при помощи моего эмулятора ДВК-1 ) мешает команда Div #10., R4, расположенная в ПЗУ по адресу 074022 ( нужно добавить эмуляцию команд EIS ).

- т.е. программа из ПЗУ на эмуляторе не запускается?

Patron
17.03.2011, 22:22
ПЗУ запускается, но после ввода любой команды системы МОЛ-601 выполняется ассемблерная инструкция Div #10., R4 по адресу 074022 и всё заканчивается вылетом в пульт ( ПЗУ при инициализации обнуляет ОЗУ, поэтому драйвер EM.SYS не помог даже после модификации LDROM, сохраняющей содержимое вектора 010 при загрузке кода ПЗУ ).

Andrey_Ak
17.03.2011, 22:26
ПЗУ запускается, но после ввода любой команды системы МОЛ-601 выполняется ассемблерная инструкция Div #10., R4 по адресу 074022 и всё заканчивается вылетом в пульт ( ПЗУ при инициализации обнуляет ОЗУ, поэтому драйвер EM.SYS не помог даже после модификации LDROM, сохраняющей содержимое вектора 010 при загрузке кода ПЗУ ).

- Так оно наверно вылетает потому что нет устройства НМЛ...
На реальной машине, без контроллера НМЛ тоже вылетает в монитор,
при попытке обратится к нему..

Patron
17.03.2011, 22:34
Нет.

Вылетает именно из-за "Trap to 10" при попытке выполнить не поддерживаемую моим эмулятором команду DIV.

Когда я на место команды DIV поставлю заглушку - вот тогда уже будет вылетать из-за "Trap to 4" при попытке читать/писать регистры контроллера.

Andrey_Ak
17.03.2011, 23:05
Может дать доступ с реальной ДВК из интернета?

Patron
17.03.2011, 23:19
Может дать доступ с реальной ДВК из интернета?Конечно ДАТЬ !!!

Кстати, после добавления в эмулятор команды DIV - стало вылетать на команде Mul #10., R3 по адресу 073752

:)

Andrey_Ak
17.03.2011, 23:21
n5083.no-ip.org 2311

BYTEMAN
17.03.2011, 23:32
Немножко побаловался, сорри :v2_blush: Буду наблюдателем ;) Прикольно посмотреть за работой на ДВК :)

Andrey_Ak
17.03.2011, 23:38
Сейчас, пару минут, сделаю загрузку с дисковода на той ДВК, с образом ПЗУ

AlecV
18.03.2011, 00:16
Patron, а содрать работу EIS/FIS с SIMH неужели нельзя ?

Patron
18.03.2011, 00:21
По поводу интернет-доступа можно пока не торопиться.
Возможность снимать логи с экрана ДВК гораздо важнее.

После добавления в эмулятор команд MUL и DIV - команды МОЛ-601 ( кроме команды DIR, использующей ASH ) начали выполняться, но никаких обращений к регистрам контроллера не последовало.


Patron, а содрать работу EIS/FIS с SIMH неужели нельзя ?Ни одна команда PDP-11 от нас не скроется!

Всех найдём и ..сэмулируем :)))

Andrey_Ak
18.03.2011, 00:51
Загрузил образ ПЗУ с дискеты на реальную ДВК

---------- Post added at 03:51 ---------- Previous post was at 03:40 ----------

Без контроллера НМЛ:

? wwedite komandu
...DIR/IST:TP
DIR-/PRM prm. ==
DIR-/MSK mAskA==
DIR-/IST ist. =TP=
DIR-/FIL fajl ==
DIR-/SOU poisk/SOU/= =
DIR-/QRY podtw./QRY/= =
DIR-/ISO zapisx/ISO/= =
DIR-/HEX format/HEX/= =
DIR-/DVC pribor= =
DIR-/EOC kon. kadr.==0 = 000010
@

С контроллером НМЛ:

? wwedite komandu
...DIR/IST:TP
DIR-/PRM prm. ==
DIR-/MSK mAskA==
DIR-/IST ist. =TP=
DIR-/FIL fajl ==
DIR-/SOU poisk/SOU/= =
DIR-/QRY podtw./QRY/= =
DIR-/ISO zapisx/ISO/= =
DIR-/HEX format/HEX/= =
DIR-/DVC pribor= =
DIR-/EOC kon. kadr.==0 =
sboj TP0 ~tenie sostoqnie 32400 ? [I,S,C,R]
DIR-/DIC ukz. blk.
=
sboj TP0 upraw. sostoqnie 32400 ? [I,S,C,R]
sboj TP0 ~tenie sostoqnie
32400 ? [I,S,C,R]

Patron
18.03.2011, 01:18
Мой вариант:


? wwedite komandu
...DIR/IST:TP
DIR-/PRM prm. ==
DIR-/MSK mAskA==
DIR-/IST ist. =TP=
DIR-/FIL fajl ==
DIR-/SOU poisk/SOU/= =
DIR-/QRY podtw./QRY/= =
DIR-/ISO zapisx/ISO/= =
DIR-/HEX format/HEX/= =
DIR-/DVC pribor= =
DIR-/EOC kon. kadr.==0 =
000010
@

Вылет в пульт происходит по "Trap to 4" при обращении к адресу 176730 в команде BiT #40,@14.(R3) , находящейся в ПЗУ по адресу 055250 .

Andrey_Ak
18.03.2011, 05:22
А что он в этот момент делает с адлресом 176730, читает оттуда данные,
или пишет туда чего?

Кстати, забыл упомянуть адрес запуска ПЗУ 20536

KALDYH
18.03.2011, 06:44
Я маленько встряну. А может быть ПЗУ кое-где битое? Там ведь обычные РФ2 на плате, отдельные биты могли стереться в 1.

Andrey_Ak
18.03.2011, 08:14
Я маленько встряну. А может быть ПЗУ кое-где битое? Там ведь обычные РФ2 на плате, отдельные биты могли стереться в 1.

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

---------- Post added at 10:27 ---------- Previous post was at 09:47 ----------

А нельзя-ли как-нибудь в эмуляторе сделать адреса шины 176730 и 176732
занести туда значение готовности НМЛ, запустить код ПЗУ, сделать какую-нибудь
операцию с НМЛ, и посмотреть что будет в этих адресах?

---------- Post added at 11:14 ---------- Previous post was at 10:27 ----------

В коде ПЗУ, по адресам:
032710/176730
032712/176732
032714/176730
032716/176732
Указаны адреса контроллера НМЛ, больше в коде их нигде нет.

Указал вместо них, адреса памяти:
032710/157730
032712/157732
032714/157730
032716/157732
Занес в 157730 и 157732 значения 0
Выполнил в программе ПЗУ команду: *REW/IST:TP
программа не вывалилась в монитор как обычно, а зависла,
остановил машину, посмотрел значения:
157730/000020
157732/000000

Patron
18.03.2011, 12:10
А что он в этот момент делает с адлресом 176730, читает оттуда данные,
или пишет туда чего? Кстати, забыл упомянуть адрес запуска ПЗУ 20536
1. Вход в ПЗУ происходит через вектор 024, где и записан адрес 020536.
2. Чтобы понять, что делает с регистрами контроллера находящийся в ПЗУ драйвер - заглянем в его код, начиная с адреса 055250 ( заменяя @14.(R3) на более понятный аналог - @#176730 ):


055250 BiT #40, @#176730
055256 BNE L055276
055260 BiS #20, @#176730
055266 L055266:
055266 BiT #40, @#176730
055274 BEq L055266
055276 L055276:
055276 Mov (SP)+, @20.(R3)
055302 Mov #1, @#176730
055310 Jmp @W147574

Это код инициализации устройства, в котором:
2.1. Проверяется BIT_5 csr
2.2. Если этот бит не установлен - устанавливается BIT_4 csr
2.3. Выполняется бесконечное ожидание установки BIT_5 csr
2.4. Устанавливается BIT_0 csr
2.5. Осуществляется возврат из подпрограммы по адресу, находящемуся в ячейке 147574.

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

Andrey_Ak
18.03.2011, 12:15
Сложно так.. :) Еще бы команды основные вытащить из кода,
а бит готовности почти на всех контроллерах одинаковый,
а вот все известные команды не подошли к данному контроллеру...

Patron
18.03.2011, 12:41
Сложно так.. :) Еще бы команды основные вытащить из кода,
а бит готовности почти на всех контроллерах одинаковый,
а вот все известные команды не подошли к данному контроллеру...Нужно рассуждать логически :)

Если бы BIT_5 csr был битом готовности и устанавливался контроллером при включении питания накопителя - не было бы никакого смысла пытаться "пробудить" его установкой BIT_4 csr.

Но мы видим, что если BIT_5 csr контроллером не установлен - драйвер устаналивает BIT_4 csr и начинает бесконечное ожидание ответной установки BIT_5 csr контроллером.

Кроме того, при входе в подпрограмму инициализации - BIT_5 csr сначала проверяется и если он уже установлен - драйвер "не трогает" BIT_4 csr.

А теперь, кто догадается, ЧТО ВСЁ ЭТО ЗНАЧИТ ?

Каковы наиболее вероятные функции битов BIT_5 и BIT_4 csr ?

Если BIT_5 - это признак работы мотора лентопротяжки, а BIT_4 - это команда его включения/выключения ( при установке 1 или 0 ) - то какова функция BIT_0 ?

Что ещё нужно сделать с лентопротяжкой перед подачей команды начала движения ленты, кроме включения мотора ?

Andrey_Ak
18.03.2011, 12:46
Там вроде как если НМЛ был выключен, программа выдает запрос
повторить, пропустить, отменить...

Может просто Jmp @W147574 поставить в адрес 055250
чтоб пропустить эту проверку, и продолжить?

Patron
18.03.2011, 13:04
Там вроде как если НМЛ был выключен, программа выдает запрос
повторить, пропустить, отменить...

Может просто Jmp @W147574 поставить в адрес 055250
чтоб пропустить эту проверку, и продолжить?Т.е. получается, что контроллер сам устанавливает этот бит, независимо от наличия НМЛ.

Думаю, есть смысл выступить "в роли драйвера". В пульте посмотреть содержимое регистра 176730 сразу после включения ДВК с контроллером ( кстати, какое оно ? ) и потом записать туда это же значение, но с установленным битом 020 - т.е. как бы выполнить команду BIS #20,@#176730 и посмотреть, что произойдёт ( как изменится значение в регистре ). Потом выполнить MOV #1,@#176730 ( а ведь это уже отнюдь не BIS ) и опять прочитать содержимое регистра.

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

Andrey_Ak
18.03.2011, 13:23
Хорошо, спасибо. Сегодня вечером так и сделаю...

---------- Post added at 16:22 ---------- Previous post was at 16:06 ----------

Сейчас объяснил маме как включить ДВК, теперь можно подключится к нему,
и посмотреть регистры 176730 и 176732
Нмл сейчас не подключен

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

Адрес для подключения терминала n5083.no-ip.org порт 2311

Andrey_Ak
18.03.2011, 15:32
Может мне съездить домой и подключить НМЛ к контроллеру?

Patron
18.03.2011, 16:01
Может мне съездить домой и подключить НМЛ к контроллеру?
Пока и так есть над чем подумать :)

...

Вот какую интересную "самодеятельность" показал контроллер:



@176730/000054
@176730/000054
@176732/000376 ^
176730/000044
@176732/000376 0^
176730/000040 1
@176730/000054
@176732/000200 0^
176730/000040 1
@176732/000200 ^
176730/000044
@176732/000200 0^
176730/000040 1
@176730/000054 1
@176730/000004 24
@176730/000004
@176732/000200 1^
176730/000004 24
@176730/000044
@176732/000200 ^
176730/000044
@176732/000200 0^
176730/000040 1
@176730/000054
@176732/000200 1^
176730/000040 1
@176730/000004 24
@176730/000044
@176732/000200 ^
176730/000044
@176732/000200 0^
176730/000040 1
@176730/000054


1. После RESET регистр 176730 имеет значение 054 ( установлены BIT_5, BIT_3, BIT_2 csr ), а регистр 176732 - случайное значение в диапазоне 0..0377.

2. Запись в регистр 176730 после RESET изменяет его значение только в том случае, если в записываемом значении установлен BIT_0 - тогда сбрасываются BIT_5 и BIT_3 ( получается 176730/000004 ) и контроллер начинает ожидать записи в регистр 176732. Затем, если в регистр 176732 записан 0 - значение регистра 176732 изменяется со случайного на число 0200, а в регистре 176730 устанавливается BIT_5 ( получается 176730/000044 ).

3. После любого чтения регистра 176732 - сбрасывается BIT_3 регистра 176730 ( если сделать это сразу после RESET, то получается 176730/000044 ).

4. После любой записи в регистр 176732, когда контроллер не ожидает записи туда - сбрасывается BIT_2 регистра 176730 ( если сделать это сразу после RESET, то получается 176730/000040 ). Если записать в регистр 176732 значение 0 и после этого записать 1 ( т.е. BIT_0 ) в регистр 176730 - то в этом регистре установятся BIT_5, BIT_3 и BIT_2 ( получается 176730/000054 ).

Весьма похоже, что строчка


055276 Mov (SP)+, @20.(R3)

в драйвере - это запись кода команды в регистр 176732.

Andrey_Ak
18.03.2011, 16:08
интересно, получается код команды находится в одном из регистров?
и после вываливания программы ПЗУ в монитор, можно попробовать поискать
команды в регистрах?

Patron
18.03.2011, 17:19
интересно, получается код команды находится в одном из регистров?
и после вываливания программы ПЗУ в монитор, можно попробовать поискать
команды в регистрах?Нет, там по чтению и записи - разные регистры.

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

Вот первые результаты:

1. После RESET контроллер имеет 054 в регистре 176730
2. При выполнении команды DIR/IST:TP


055250 / BiT #40, @16(R3) - читает 054 по адресу 176730
055276 / Mov (SP)+, @24(R3) - пишет 033407 по адресу 176732
055302 / Mov #1, @16(R3) - пишет 01 по адресу 176730
053376 / BiT #40, @16(R3) - читает 054 по адресу 176730
053406 / BiT #10, @16(R3) - читает 054 по адресу 176730
053416 / MovB @20(R3),-(SP) - читает 00 по адресу 176732

затем анализирует полученный результат и выводит на экран:

sboj TP0 ~tenie sostoqnie 32400 ? [I,S,C,R]

Andrey_Ak
18.03.2011, 18:13
Всем добрый вечер! :)

Сейчас подключу НМЛ к ДВК.....

Patron
18.03.2011, 18:24
Если для продолжения нажать R :


sboj TP0 ~tenie sostoqnie 32400 ? [I,S,C,R] R

053464 / Mov #2, @24(R3) - пишет 02 по адресу 176732
053472 / Mov #1, @16(R3) - пишет 01 по адресу 176730
053500 / BiT @16(R3), #60 - читает 044 по адресу 176730

055250 / BiT #40, @16(R3) - читает 044 по адресу 176730
055276 / Mov (SP)+, @24(R3) - пишет 033411 по адресу 176732
055302 / Mov #1, @16(R3) - пишет 01 по адресу 176730
053376 / BiT #40, @16(R3) - читает 054 по адресу 176730
053406 / BiT #10, @16(R3) - читает 054 по адресу 176730
053416 / MovB @20(R3),-(SP) - читает 00 по адресу 176732

затем анализирует полученный результат и выводит на экран:

DIR-/DIC ukz. blk.
=
sboj TP0 upraw. sostoqnie 32400 ? [I,S,C,R]

Andrey_Ak
18.03.2011, 18:56
Подключил НМЛ.... :)
Проверил, с программой из ПЗУ он работает...

Можно играться.. :)

Подключатся терминалом на сервер n5083.no-ip.org порт 2311

---------- Post added at 21:42 ---------- Previous post was at 21:27 ----------

Похоже лента сдвинулась с места.. :)

---------- Post added at 21:56 ---------- Previous post was at 21:42 ----------

Когда лента сдвинулась, она перестала стоять на маркере, и сейчас
кнопка "Загрузка" не горит..

Может вернуть ленту на начало?

Patron
18.03.2011, 19:35
Вот что удалось определить:

1. Перед подачей команды нужно убедиться, что в регистре 176730 установлен BIT_5 ( т.е. 040 ).

2. Для подачи команды - сначала её код нужно записать в регистр 176732, а затем записать 1 в регистр 176730 для начала выполнения команды.

3. Если контроллер понял команду и выполняет её - он устанавливает BIT_3 ( 010 ) в регистре 176730.

4. Когда команда завершена и контроллер готов принять следующую - он устанавливает BIT_5 ( 040 ) в регистре 176730.


Коды команд:

DIR/IST:TP 033407
REW/IST:TP 033403
FSR/IST:TP 033413
BSR/IST:TP 033412
FSF/IST:TP 033411
BSF/IST:TP 033410

Andrey_Ak
18.03.2011, 19:46
Получается:

DIR/IST:TP 033407 - Вывод меток маршрутов
REW/IST:TP 033403 - Перемотка на начало ленты
FSR/IST:TP 033413 - Шаг на блок вперед
BSR/IST:TP 033412 - Шаг на блок назад
FSF/IST:TP 033411 - Шаг на файл вперед
BSF/IST:TP 033410 - Шаг на файл назад

А как читать/писать данные?

---------- Post added at 22:46 ---------- Previous post was at 22:43 ----------

А как добиться чтоб в регистре 176730 был установлен BIT_5 ( т.е. 040 ) ?

Patron
18.03.2011, 19:47
А как читать/писать данные?Наверное, для этого тоже нужны какие-то команды..

А те команды, которые мы только что тестировали - откуда известны ?

Andrey_Ak
18.03.2011, 19:54
Наверное, для этого тоже нужны какие-то команды..

А те команды, которые мы только что тестировали - откуда известны ?

Из скудного описания на комплекс..

---------- Post added at 22:54 ---------- Previous post was at 22:50 ----------

В конце кода ПЗУ есть полный список команд, которые видно...

Patron
18.03.2011, 19:58
А как добиться чтоб в регистре 176730 был установлен BIT_5 ( т.е. 040 ) ?Похоже, что для этого есть несколько способов:

1. Выполнить команду RESET ( 005 )

2. Записать 024 в регистр 176730

3. Записать 0 в регистр 176732 и 1 в 176730

Andrey_Ak
18.03.2011, 20:56
Включаю машину, может попробовать поискать в коде команды чтения/записи?

Patron
18.03.2011, 21:07
Проверил все команды, не использующие FIS.
Большинство команд используют код 033407.

Обнаружил ещё только один новый код команды:



Коды команд:

DIR/IST:TP 033407
REW/IST:TP 033403
FSR/IST:TP 033413
BSR/IST:TP 033412
FSF/IST:TP 033411
BSF/IST:TP 033410

WTM/IST:TP 033404



Что-то мнемоника WTM подозрительно напоминает "Write Mark" - как бы ленту не испортить..

Andrey_Ak
18.03.2011, 21:14
Да пожалуйста, портите, это не нужная лента... Делайте что хотите с ней.. :)
Главное разобраться с контроллером...

---------- Post added at 00:14 ---------- Previous post was at 00:11 ----------

А 33ххх случано не будет тоже самое что 00ххх ? А то кроме 33 команды знакомые откуда-то...

Patron
18.03.2011, 21:16
Вот список всех команд ПЗУ:


NET
COMPILE
EDT
POSW
SRF
PGE
GET
OS$
SHW
TIU
TR
TF
TV
CUT
FSF
FSR
BSF
BSR
REW
WTM
GRF
FLP
CHK
DGT
VRC
SQR
DIR
ASM

Какие из этих команд читают или пишут ленту ?


А 33ххх случано не будет тоже самое что 00ххх ? А то кроме 33 команды знакомые откуда-то...
0334 - это старший байт.
Команды - в младшем байте:
00 ; 01(?) ; 02 ; 03 ; 04 ; 05(?) ; 06(?) ; 07 ; 010 ; 011 ; 012 ; 013 ;

Andrey_Ak
18.03.2011, 22:09
@20536G
...WTM
WTM-/IST ist. ==TP
WTM-/REP pow=0 =
...

- Продвинул немного ленту, наверно что-то записал туда...

---------- Post added at 01:09 ---------- Previous post was at 00:34 ----------

Может команда 033407 DIR/IST:TP
и есть команда чтения? куда-то же он пишет прочитанное седержимое?

Patron
18.03.2011, 22:20
Может команда 033407 DIR/IST:TP
и есть команда чтения? куда-то же он пишет прочитанное седержимое?Насколько я понял смысл кода 033407 - он начинает мотать ленту, показывая в регистре 176732 все встреченные метки.

Этот код используют команды:

TR/IST:TP
TF/IST:TP
TV/IST:TP
CUT/IST:TP
TIU/IST:TP
SHW/IST:TP
GET/IST:TP

Andrey_Ak
18.03.2011, 22:39
Насколько я понял смысл кода 033407 - он начинает мотать ленту, показывая в регистре 176732 все встреченные метки.

Этот код используют команды:

TR/IST:TP
TF/IST:TP
TV/IST:TP
CUT/IST:TP
TIU/IST:TP
SHW/IST:TP
GET/IST:TP

"все встреченные метки"

- Меня это очень беспокоит.. :|
Как бы не оказался этот контроллер специализированным,
для чтения только определенных лент...

---------- Post added at 01:39 ---------- Previous post was at 01:27 ----------

Хотя, на этом комплексе МОЛ-601 еще стоял стандартный
контроллер СТ (177550), для управления которым использовались
те-же команды что и для НМЛ СМ5300.01

Andrey_Ak
19.03.2011, 09:18
@176730/000044
@176732/000201

@176732/000201 403
@176730/000040 1

- Промотал ленту на начало (из ПЗУ команда REW)

@176730/000044
176732/000201

Значение регистра 176730 изменяется на 40, после
введения команды в регистр 176732

-----------------------------------------------

@176730/000044
@176732/000201

@176732/000201 407
@176730/000040 1

- Промотал ленту вперед (из ПЗУ команда DIR)

@176730/000054

Значение 54 в регистре 176730 будет до тех пор,
пока не открыть регистр 176732

@176730/000054
@176730/000054
@176730/000054
@176730/000054
@176730/000054
@176730/000054
@176732/000201

@176730/000044
@176732/000201

-----------------------------------------------

@176730/000044
@176732/000201

@176732/000201 404
@176730/000040 1

- Промотал ленту вперед (из ПЗУ команда WTM)

@176730/000054

Значение 54 в регистре 176730 будет до тех пор,
пока не открыть регистр 176732

@176730/000054
@176730/000054
@176730/000054
@176732/000201

@176730/000044
@176732/000201

-----------------------------------------------

Andrey_Ak
19.03.2011, 11:35
Поставил новую, чистую ленту.

@176730/000044
@176732/000201

@176732/000201 407
@176730/000040 1

- Мотает ленту вперед (из ПЗУ команда DIR)

В момент мотания вперед значения регистров:

@176730/000004
176732/000201

Немного промотал, остановился.
Значения регистров:

@176730/000054
176732/000202

После открытия регистра 176732 значение регистра
176730 поменялось как обычно на 44

@176730/000044
176732/000202

------------------------------------------------

---------- Post added at 14:30 ---------- Previous post was at 14:21 ----------

------------------------------------------------

Идем дальше с чистой лентой:

@176730/000044
176732/000202

176732/000202 403 (Перемонтка на начало)
@176730/000040 1

@176730/000044
176732/000202
(После перемотки значение 202 в регистре 176732
на 201 не поменялось)

@176730/000044
176732/000202

@176732/000202 404
@176730/000040 1

- Промотал ленту вперед (из ПЗУ команда WTM)
(Причем промотал чуть-чуть, не так долго как
при команде 407 (из ПЗУ команда DIR))


@176730/000054
@176730/000054
@176730/000054
@176732/000201

После открытия регистра 176732 значение регистра
176730 поменялось как обычно на 44

@176730/000044
176732/000201

------------------------------------------------

---------- Post added at 14:35 ---------- Previous post was at 14:30 ----------

------------------------------------------------

Продолжаем с чистой лентой:

@176730/000044
176732/000201

176732/000201 403 (Перемонтка на начало)
@176730/000040 1

@176732/000201 407
@176730/000040 1

- Промотал ленту вперед (из ПЗУ команда DIR)
(Причем не так долго как, до того когда мы
выполняли эту-же команду при чистой ленте,
до записи на нее)

@176730/000054
@176730/000054
@176732/000201

@176730/000044
176732/000201

------------------------------------------------

Andrey_Ak
19.03.2011, 23:07
------------------------------------------------

Включил магнитофон с той-же новой лентой,
но только без кольца разрешения записи.

@176730/000054
176732/000066

После открытия регистра 176732 значение регистра
176730 поменялось как обычно на 44

@176730/000044
176732/000066 (Код 66 - наверно защита записи)

Пробуем сделать запись:

@176732/000066 404
@176730/000040 1

Ничего не произошло.

@176730/000054
@176730/000054
@176732/000006
@176730/000040

------------------------------------------------

---------- Post added at 02:07 ---------- Previous post was at 01:52 ----------

------------------------------------------------

Попробовал прочитать записанную ленту
от подобного комплекса с ОС:

@176730/000044
176732/000066 (Код 66 - наверно защита записи)

176732/000066 407
@176730/000040 1

- Промотал ленту совсем чуть-чуть вперед
(из ПЗУ команда DIR)

@176730/000054
176732/000204

@176730/000044
176732/000204

Попробовал прочитать дальше:

@176732/000204 407
@176730/000040 1

- Промотал ленту вперед (из ПЗУ команда DIR)
(Но на одном месте немножно дергал ленту
туда-сюда, возможно сбой на ленте)

@176730/000054
176732/000370 (Код 370 - наверно ошибка чтения)
@176730/000044
176732/000370

------------------------------------------------

Patron
20.03.2011, 11:48
Как бы не оказался этот контроллер специализированным, для чтения только определенных лент...Учитывая, что команда FSF/IST:TP 033411 ( Шаг на файл вперед ) выполняется без передачи данных в компьютер - файловый формат ленты анализируется именно контроллером.

Andrey_Ak
20.03.2011, 12:32
FSF/IST:TP 033411 - Вот интересно, что значит 033411 ?
Ведь эта команда выполняется и просто 000411....

---------- Post added at 15:29 ---------- Previous post was at 15:26 ----------

Включил машину и НМЛ... Может попробовать сделать так:

Записать во все ячейки памяти скажем число 777, затем выполнить
команду чтения НМЛ, потом просканировать память и посмотреть, изменилось
ли где-нибудь число 777...

---------- Post added at 15:32 ---------- Previous post was at 15:29 ----------

Сейчас заправлена лента с образом ОС, и в первом блоке ленты должен быть загрузчик, который начинается с кода 240

Patron
20.03.2011, 15:28
Записать во все ячейки памяти скажем число 777, затем выполнить
команду чтения НМЛ, потом просканировать память и посмотреть, изменилось
ли где-нибудь число 777...Какая команда ПЗУ читает данные с ленты и помещает их в память?

Чтобы контроллер начал передачу данных в память в режиме ПДП (если он это умеет) - в него необходимо последовательно передать несколько разных кодов. Какие это коды?


Сейчас заправлена лента с образом ОС, и в первом блоке ленты должен быть загрузчик, который начинается с кода 240Какая команда ПЗУ загружает ОС с ленты (или хотя бы читает в память нулевой блок)?

Andrey_Ak
20.03.2011, 17:23
Какая команда ПЗУ читает данные с ленты и помещает их в память?

Чтобы контроллер начал передачу данных в память в режиме ПДП (если он это умеет) - в него необходимо последовательно передать несколько разных кодов. Какие это коды?

Какая команда ПЗУ загружает ОС с ленты (или хотя бы читает в память нулевой блок)?

- Я не знаю какая команда из ПЗУ читает данные с ленты и помещает их в память...

На том комплексе не читались ленты с ОС, но писались ленты с данными,
которые обрабатывались на большой машине, которая понимает ленты
с ОС совместимой с PDP11

---------- Post added at 20:15 ---------- Previous post was at 19:45 ----------

Нашел книжку...

Команды копирования:

CUT PRM, IST, REP - Копирует файлы с поиском указательных блоков ММВ-215
TR PRM, IST, REP - Копирует группу блоков
TF PRM, IST, REP - Копирует группу файлов
TV PRM, IST, REP - Копирует тома
TIU PRM, IST, REP - Копирует с переблокировкой в блоки длиной1К

IST - Устройство источник, PRM - Устройство приемник, REP - Кол-во повторений

---------- Post added at 20:19 ---------- Previous post was at 20:15 ----------

Команды управления устройствами:

BSF IST, REP - Шаг на Файл назад
BSR IST, REP - Шаг на Блок назад
FSF IST, REP - Шаг на Файл вперед
FSR IST, REP - Шаг на Блок вперед
REW IST, REP - Перемотка

IST - Устройство источник, PRM - Устройство приемник, REP - Кол-во повторений
WTM IST, REP - Запись маркера группы зон
POSW PRM - Позицирование между двумя МГЗ для продолжения записи

---------- Post added at 20:23 ---------- Previous post was at 20:19 ----------

Символические имена устройств:

TP - НМЛ СМ5300
CS0 - КНМЛ0 СМ5211
CS1 - КНМЛ1 СМ5211

Patron
20.03.2011, 17:29
- Я не знаю какая команда из ПЗУ читает данные с ленты и помещает их в память...

На том комплексе не читались ленты с ОС, но писались ленты с данными,
которые обрабатывались на большой машине, которая понимает ленты
с ОС совместимой с PDP11Писать данные на ленту вряд ли интересно. Хотелось бы найти команду ПЗУ, которая что-нибудь с ленты прочитает.


Однокодовые команды:

REW/IST:TP - 033403
WTM/IST:TP - 033404
BSF/IST:TP - 033410
FSF/IST:TP - 033411
BSR/IST:TP - 033412
FSR/IST:TP - 033413


Двухкодовая команда

GET/IST:TP - 033407 + 02


Остальные команды многокодовые.

Хотя, команда SHW/IST:TP, если не указан приёмник ( PRM = " " ), похоже - делает то же самое, что и GET/IST:TP, но результаты выводит на экран.

Andrey_Ak
20.03.2011, 17:41
Включил машину и НМЛ...
Сейчас заправлена лента с образом ОС, и в первом блоке ленты должен быть загрузчик, который начинается с кода 240

Patron
20.03.2011, 17:44
Что получится, если дать команду ПЗУ

SHW/IST:TP

?

Andrey_Ak
20.03.2011, 17:51
172140/000000 37
172142/000000 0
G
LDROM

---------- Post added at 20:50 ---------- Previous post was at 20:46 ----------

...SHW/IST:TP
SHW-/PRM prm. ==
SHW-/IST ist. =TP=
SHW-/STR KOD [0..F]==
SHW-/DVC pribor= =00FFA0000D010000000000000000000000000000000000000 0000000104210
9D00015F007C01000000000000000000000000000000000000 000000000000000000000000000000
00000000000000000000000000000000000000000000000000 000000000000000000000000000000
00000000000000000000000000000000000000000000000000 0000C31500FA1310D3150000D21242
00000000000000000000000000000000000000000000000000 0000C31500FA1310D3150000D21242
.................. И Т.Д.

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

Выдает на экран кучу всего с ленты...

Patron
20.03.2011, 17:56
Похоже, что двухкодовая последовательность [ 033407 + 02 ] читает с ленты какой-то объём данных в режиме ПДП (т.к. дополнительных обращений к регистрам нет).

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

...

Команда GET/IST:TP выдаёт в контроллер те же самые коды, но никуда буфер не копирует ( в т.ч. не выводит дамп на экран при отсутствии приёмника в ключе /PRM: ).

Andrey_Ak
20.03.2011, 18:45
Что есть 33 в коде команды? И где задается адрес памяти для чтения туда и оттуда данных?

Patron
20.03.2011, 18:55
Что есть 33 в коде команды? И где задается адрес памяти для чтения туда и оттуда данных?Думаю, это оно и есть :)

Код 033407 состоит из двух байтов: 067 (старший) и 07 (младший). 07 - это команда контроллера, а 067 - (скорее всего) какое-то указание на адрес буфера в памяти.

Сейчас попробую найти, откуда выводит дамп команда SHW.

Andrey_Ak
20.03.2011, 18:58
Думаю, это оно и есть :)

Код 033407 состоит из двух байтов: 067 (старший) и 07 (младший). 07 - это команда контроллера, а 067 - (скорее всего) какое-то указание на адрес буфера в памяти.

Сейчас попробую найти, откуда выводит дамп команда SHW.

- Да, похоже что так, попробовал код 7 вместо 407 и работает... :)

Patron
20.03.2011, 19:24
Дамп выводится из буфера текста по адресу 0123240.
В моём варианте ( когда число прочитанных байт == 0 ) в этот буфер копируется ( циклом SOB ) только один байт из буфера с адресом 0146002.

Andrey_Ak
20.03.2011, 19:26
Может попробуете сейчас потестировать чтение с НМЛ, там сейчас стоит лента с загрузчиком, код которого начинается на 240

Patron
20.03.2011, 19:44
Лучше я буду осуществлять "научное руководство" :)

Нужно написать простенькую программку копирования блоков памяти ( в диапазоне 0100000 - 0160000 ) на диск ( можно прямо с 0-го блока ). Добавить её к коду ПЗУ ( там есть свободное место в секции векторов и ещё 66. слов в конце кода ) и сделать дамп два раза:
1. До подачи команды GET/IST:TP
2. После.
Потом сравнить два дампа ( например программой BINCOM ).

Andrey_Ak
20.03.2011, 19:48
ну с этим будут сложности, мне даже вот так вот сразу сложно написать программку
для заполнения всей памяти скажем числом ХХХ, потом выполнить чтение с НМЛ,
и написать программку, которая просканирует память и выдаст адреса в которых содержимое отличается от ХХХ

Patron
20.03.2011, 19:54
Именно поэтому нужно писать дампы на дискету - это всего несколько команд контроллера MY. ( Примерно столько же, сколько нужно, чтобы загрузиться с дискеты, выдавая команды в контроллер ).

Можно даже каждый раз после загрузки LDROM - вбивать эти коды в память ДВК вручную.

Andrey_Ak
20.03.2011, 20:21
Как это сделать?

Patron
20.03.2011, 23:09
Как это сделать?Понятия не имею :)

Мои знания контроллера MY ограничиваются его названием :)))

Andrey_Ak
20.03.2011, 23:12
Понятия не имею :)

Мои знания контроллера MY ограничиваются его названием :)))

- Может напишем две маленькие программки:

1) Заполняет всю память числом 777
2) Читает все содержимое памяти, и ищет значения отличные от 777

Patron
21.03.2011, 12:17
- Может напишем две маленькие программки:

1) Заполняет всю память числом 777
2) Читает все содержимое памяти, и ищет значения отличные от 777Нельзя заполнять ВСЮ память.
Образ ПЗУ, загруженный LDROM должен оставаться неизменным.
Память надо заполнять в диапазоне 0100000-0160000.


Программка заполнения:

Mov R0,(R1)+
SOB R2, .-2.
Halt

Выглядит в памяти так:

010021
077202
000000

=================

Программка сравнения:

Cmp R0,(R1)+
BEq .-2.
Halt

Выглядит так:

020021
001776
000000

Andrey_Ak
23.03.2011, 20:08
Заполняет всю память числом из R0,
начиная с адреса в R1

000000/010021 MOV R0,(R1)+
000002/077202 SOB R2, .-2.
000004/000000 HALT
R0/000777
R1/000006


Проверяет всю память, сравнивая с числом из R0,
начиная с адреса в R1, если находит не совпадение
останавливается на адресе 6, если не совпадений не найдено, останавливается по адресу 2,
в R1 содержится адрес -1 , по которому найдено не
совпадение.

000000/020021 CMP R0,(R1)+
000002/001776 BEQ .-2.
000004/000000 HALT
R0/000777
R1/000006

Заполнил всю память числом 111111, проверил, содержимое всей памяти,
соответствует 111111.

Выполнил команды:

176732/000066 7
@176730/000040

НМЛ Прочитал кусочек ленты, проверил память, как было во всех ячейках 111111
так и осталось.

176732/000066 33407
@176730/000040


НМЛ Прочитал кусочек ленты, проверил память, как было во всех ячейках 111111
так и осталось.

Patron
23.03.2011, 22:53
1. При заполнении памяти - в R2 нужно записывать число заполняемых слов ( или 0 - если нужно заполнять "до упора" ).

2. Старший байт команды может иметь смысл "вектора" по которому находится адрес буфера, поэтому область векторов ПЗУ я бы не затирал.

3. Процедура чтения ( команда ПЗУ GET/IST:TP ) состоит из последовательной подачи двух кодов.

3.1. Сначала подаётся код 033407 ( т.е. пишется код 033407 в регистр 176732 и 01 в регистр 176730 )
3.2. Затем ожидается появление 054 в регистре 176730
3.3. Затем проверяется установка бита 0200 в регистре 176732
3.4. Если пп 3.2 и 3.3 выполнены - подаётся код 02 ( т.е. пишется код 02 в регистр 176732 и 01 в регистр 176730 )
3.5. Ожидается появление 054 в регистре 176730

4. Не стоит располагать программу заполнения ( и/или сравнения ) памяти так, чтобы она рекурсивно вызывалась при попытке записи/чтения по несуществующему адресу ( команда HALT по адресу 04 воспринимается процессором как равный нулю адрес обработчика прерывания зависания ).

Andrey_Ak
23.03.2011, 23:18
ммм... интересно... Может попробуете сейчас это сделать? :)

---------- Post added at 02:18 ---------- Previous post was at 01:59 ----------

Интересно:

@176730/000054
176732/000066 033407
@176730/000040 1
@176730/000054
@176732/000202 02
@176730/000040 01
@
@176730/000014
@176730/000014
@176730/000014
176732/000333
176734/
BUS ERROR
@176730/000014
176732/000001
176734/
BUS ERROR
@176732/000101
@176732/000021
@176732/000372
@176732/000003
@176732/000341
@176732/000013
@176732/000300
@176732/000022
@176732/000146
@176732/000020
@176732/000301
@176732/000025
@176732/000000
@176732/000001
@176732/000367
@176730/000014
@176732/000011
@176732/000172
@

Может данные читаются из 176732 ?

Patron
23.03.2011, 23:33
ммм... интересно... Может попробуете сейчас это сделать? :)Попробую научить :)

1. Загрузить образ ПЗУ в память.

2. Проверить ( с помощью эмулятора пульта ) содержимое буфера по адресу 0140000 ( там все нули ).

3. Выполнить команду GET/IST:TP ( или SHW/IST:TP )

4. Проверить, изменилось ли содержимое буфера ( похоже, что ПЗУ читает именно туда ).

...

5. Добавить к коду ПЗУ в памяти парочку "наших" подпрограмм по адресам 0110 и 0130

6. Заполнить числом 0111111 адреса с 0100000 по 0160000 ( R0/111111 ; R1/100000 ; R2/0 )

7. Выполнить описанную выше последовательность подачи кодов команды GET/IST:TP

8. Сравнить содержимое слов в диапазоне с 0100000 по 0160000 со значением 0111111 ( R0/111111 ; R1/100000 ).

9. Доложить результат :)

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


Может данные читаются из 176732 ?Только если по прерываниям.

Циклического опроса регистров ПЗУ не производит, а логика эмуляции прерываний этого контроллера мне пока не известна.

Кстати, бит 010 в регистре 176730 означает "есть новые данные". Контроллер устанавливает этот бит каждый раз, когда в регистре 176732 появляется что-то "новенькое" и сбрасывает его после каждого чтения регистра 176732 процессором.

Andrey_Ak
24.03.2011, 00:05
Заполняю адреса 100000 - 160000 числом 111111,
после запуска программы ПЗУ по 20536G, и выхода из
программы все в 100000 - 160000 стирается..

---------- Post added at 03:05 ---------- Previous post was at 02:46 ----------

Заполнил память с 100000 до 160000 значением 000000,
@20536G
...*REW/IST:TP
...GET/IST:TP
GET-/IST ist. =TP=
...
? wwedite komandu
... 055554
@R0/105124 000000
R1/111056 100000
R2/105110 0
@R0/000000
R1/100000
R2/000000
@130G 000136
@R1/100036
@100030/000000
100032/000000
100034/105124
100036/047416
100040/000000
@100034/105124 0
100036/047416 0
@130/020021
000132/001776
000134/000000
@R0/000000
R1/100036 100000
R2/000000
@130G 000136
@R1/102070
@102070/143334
102072/100046
102074/100452
102076/143354
102100/040260
102102/040354
102104/102626
102106/144600
102110/145000
102112/145200
102114/146566
102116/145400
102120/145600
102122/113174
102124/143760
102126/143762
102130/143764
102132/144000
102134/144400
102136/113174
102140/123234
102142/143766
102144/143770
102146/143772
102150/143774
102152/143776
102154/113172
102156/000000
102160/000000
102162/000000
102164/000000
102166/000000
@

Patron
24.03.2011, 02:47
Похоже, что я ошибся, говоря, что драйвер не опрашивает регистры.

На самом деле это я ему выдавал в регистре 176730 код 044, что "на языке контроллера" означает: "Команда завершена, нет данных для чтения, буфер команд свободен."

Теперь припоминаю, что когда я один раз выдал драйверу код 014, вместо 044 - драйвер как раз принялся циклически опрашивать регистр 176732 и копировать оттуда данные.

Так что с чтением данных мы разобрались.

Никаких прерываний и запросов ПДП не происходит.

Всё, что контроллер может прочитать с ленты - появляется в регистре 176732 и может быть оттуда скопировано.

Andrey_Ak
24.03.2011, 02:49
И как организовать чтение/запись?

Patron
24.03.2011, 02:58
Про запись мы пока ничего не знаем, а чтение можно выполнять точно так же, как это делает ПЗУ:

1. Подать коды 033407 + 02
2. Ожидать установки битов 040|010 в регистре 176730
3. Если бит 010 регистра 176730 установлен - регистр 176732 содержит очередной байт данных, который нужно скопировать в буфер.
4. Если бит 040 регистра 176730 сброшен - перейти к п.2

Andrey_Ak
24.03.2011, 03:01
А можно все это изобразить в виде маленькой программки?

---------- Post added at 06:01 ---------- Previous post was at 05:59 ----------

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

Patron
24.03.2011, 03:17
1. Процесс можно начинать, когда в регистре 176730 установлен бит 040 . Если этот бит не установлен - выполнить команду RESET.
2. Фаза подачи команды ранее уже была досконально расписана и выполнена вручную.
3. Похоже, что данные с ленты "не слишком" буферизуются контроллером - если не успеть прочитать очередной байт данных - он скорее всего пропадёт.
4. Думаю, что при аварийном завершении - устанавливается бит 020 регистра 176730 ( кроме того, установка этого бита драйвером - прекращает процедуру чтения ленты контроллером ).
5. Блоки могут иметь любой размер - контроллер передаёт данные побайтно до тех пор, пока (как я полагаю) накопитель не наткнётся на метку конца блока.

Andrey_Ak
24.03.2011, 04:01
@176730/000054
176732/000066

@176730/000044
176732/000066

@176730/000044
176732/000066 7
@176730/000040 1

Прочитал кусочек ленты.

@176730/000054
176732/000200 2
@176730/000040 1

@176730/000014
176732/000240 (240 - Начало загрузчика с системной ленты)
176734/
BUS ERROR
@176730/000014
176732/000000
176734/
BUS ERROR
@176730/000014
176732/000015
176734/
BUS ERROR
@176730/000014
176732/000001
176734/
BUS ERROR

Patron
24.03.2011, 13:19
Вот так может выглядеть программка, читающая блок с ленты в буфер по адресу 020000:


TPS =: 176730
TPD =: 176732

Buffer =: 20000

Mov #Buffer, R1
Clr R0

BiT #40, @#TPS
BNE 1$
Reset
1$:
Mov #33407, @#TPD
Mov #1, @#TPS
2$:
Cmp #54, @#TPS
BNE 2$
Mov #2, @#TPD
Tst @#TPD
Mov #1, @#TPS
4$:
BiT #40, @#TPS
BNE 3$
BiT #10, @#TPS
BEq 4$
MovB @#TPD, (R1)+
Inc R0
Br 4$
3$:
BiT #10, @#TPS
BEq 5$
MovB @#TPD, (R1)+
Inc R0
5$:
Halt

После завершения - R0 содержит число байт, записанных в память, начиная с адреса 020000 .

Andrey_Ak
24.03.2011, 13:20
А можно пожалуйста в кодах тоже, а то замучаюсь переводить...

Patron
24.03.2011, 13:37
005000 Clr R0
012701 Mov #Buffer, R1
020000
012702 Mov #TPS, R2
176730
012703 Mov #TPD, R3
176732
032712 BiT #40, (R2)
000040
001001 BNE 1$
000005 Reset
1$:
012713 Mov #33407, (R3)
033407
012712 Mov #1, (R2)
000001
2$:
022712 Cmp #54, (R2)
000054
001375 BNE 2$
012713 Mov #2, (R3)
000002
005713 Tst (R3)
012712 Mov #1, (R2)
000001
4$:
032712 BiT #40, (R2)
000040
001006 BNE 3$
032712 BiT #10, (R2)
000010
001772 BEq 4$
111321 MovB (R3), (R1)+
005200 Inc R0
000767 Br 4$
3$:
032712 BiT #10, (R2)
000010
001402 BEq 5$
111321 MovB (R3), (R1)+
005200 Inc R0
5$:
000000 Halt

Andrey_Ak
24.03.2011, 13:57
Я вот думаю, может выпаять ПЗУ из контроллера и считать его?

---------- Post added at 16:57 ---------- Previous post was at 16:44 ----------

Сегодня вечером попробую...

Andrey_Ak
24.03.2011, 20:47
Попробовал, программка вешается на коде
022712 Cmp #54, (R2)
000054
001375 BNE 2$

---------- Post added at 23:47 ---------- Previous post was at 23:41 ----------

@1000/005000
001002/012701
001004/020000
001006/012702
001010/176730
001012/012703
001014/176732
001016/032712
001020/000040
001022/001001
001024/000005
001026/012713
001030/033407
001032/012712
001034/000001
001036/022712
001040/000054
001042/001375
001044/012713
001046/000002
001050/005713
001052/012712
001054/000001
001056/032712
001060/000040
001062/001006
001064/032712
001066/000010
001070/001772
001072/111321
001074/005200
001076/000767
001100/032712
001102/000010
001104/001402
001106/111321
001110/005200
001112/000000
@
@1000G 'Висит, делаю останов' 001042
@

Patron
24.03.2011, 20:59
Прервав программу - нужно проверить содержимое регистра 176730.
Программа ждёт, когда там появится 054, а что там на самом деле ?

Andrey_Ak
24.03.2011, 21:03
@1000G 001036
@176730/000050
@

---------- Post added at 00:03 ---------- Previous post was at 00:01 ----------

После открытия регистра 176730 и 176732 в 176730 снова 40

@1000G 001042
@176730/000050
176732/000066
176734/
BUS ERROR
@176730/000040
176732/000066
176734/
BUS ERROR
@

Patron
24.03.2011, 21:07
Лень пока программу править - лучше прервать и затем запустить с адреса 01044 ( 1044G ) - тогда программа пойдёт дальше.

Andrey_Ak
24.03.2011, 21:16
@1044G 001114
@176730/000040
176732/000066
176734/

---------- Post added at 00:16 ---------- Previous post was at 00:08 ----------

Ладненько, завтра с утра еще попробую...

Patron
24.03.2011, 23:16
Вот новый вариант, который не должен зависать:



005000 Clr R0
012701 Mov #Buffer, R1
020000
012702 Mov #TPS, R2
176730
012703 Mov #TPD, R3
176732
032712 BiT #40, (R2)
000040
001001 BNE 1$
000005 Reset
1$:
012713 Mov #33407, (R3)
033407
012712 Mov #1, (R2)
000001
2$:
032712 BiT #40, (R2)
000040
001775 BEq 2$
005713 Tst (R3)
012713 Mov #2, (R3)
000002
012712 Mov #1, (R2)
000001
4$:
032712 BiT #40, (R2)
000040
001006 BNE 3$
032712 BiT #10, (R2)
000010
001772 BEq 4$
111321 MovB (R3), (R1)+
005200 Inc R0
000767 Br 4$
3$:
032712 BiT #10, (R2)
000010
001402 BEq 5$
111321 MovB (R3), (R1)+
005200 Inc R0
5$:
000000 Halt


Программа подаёт коды 033407 + 02 в регистр 176730, читает байты данных из регистра 176732 ( в буфер по адресу 020000 ) и возвращает число прочитанных байт в регистре R0.

Andrey_Ak
25.03.2011, 05:17
@1000G 001114
Ничего не прочиталось...
@R0/000000
@1110/005200
001112/000000

---------- Post added at 08:17 ---------- Previous post was at 08:17 ----------

Возможно требуется ввести задержки...

Patron
25.03.2011, 16:25
Нужно программно воспроизвести те обращения к регистрам контроллера, которые происходят при работе драйвера из ПЗУ ( и при запуске чтения ленты в "ручном режиме" ).

...

Сейчас я добавил в эмуляцию регистров контроллера появление в регистре 176732 данных с ленты, выполнил команду SHW/IST:TP и получил на экране имеенно те байты, которые показывал в регистре 176732. После завершения дампа блока ( когда я показал в регистре 176730 не 014, а 044 ) - драйвер повторил процедуру чтения, снова подав коды 033407 + 02.

Получается, что команда SHW/IST:TP - последовательно выводит дамп всех блоков ленты ( причём, на экране содержимое отдельных блоков никак не разделяется ).

Такие команды использовал драйвер из ПЗУ для чтения блока ленты:


BiT #40, @#176730
BNE Ready
BiS #20, @#176730
1$:
BiT #40, @#176730
BEq 1$
Ready:
Mov #33407, @#176732
Mov #1, @#176730
2$:
BiT #40, @#176730
BEq 2$

BiT #10, @#176730
BEq OK

MovB @#176732, R4
BPl Error
ASR R4
BCS Abort
OK:
Mov #2, @#176732
Mov #1, @#176730
3$:
BiT #60, @#176730
BNE Done
BiT #10, @#176730
BEQ 3$

MovB @#176732, (R1)+
Inc R0
Br 3$
Done:


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



005000 Clr R0
012701 Mov #Buffer, R1
020000
012702 Mov #TPS, R2
176730
012703 Mov #TPD, R3
176732
032712 BiT #40, (R2)
000040
001001 BNE 1$
000000 Halt
1$:
012713 Mov #33407, (R3)
033407
012712 Mov #1, (R2)
000001
2$:
032712 BiT #40, (R2)
000040
001775 BEq 2$
032712 BiT #10, (R2)
000010
001406 BEq 7$
111304 MovB (R3), R4
100401 BMi 6$
000000 Halt
6$:
006204 ASR R4
103001 BCC 7$
000000 Halt
7$:
012713 Mov #2, (R3)
000002
012712 Mov #1, (R2)
000001
4$:
032712 BiT #60, (R2)
000060
001006 BNE 3$
032712 BiT #10, (R2)
000010
001772 BEq 4$
111321 MovB (R3), (R1)+
005200 Inc R0
000767 Br 4$
3$:
000000 Halt


При любых "нештатных" ситуациях происходит останов.


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

Andrey_Ak
28.03.2011, 10:12
Сегодня вечером обязательно попробую.. :)

Patron
28.03.2011, 15:58
Кстати, не обязательно вбивать коды руками.

Можно скомпилировать программу ассемблером и запускать из-под RT-11.

Вот готовый для компиляции вариант - файл TP.MAC ( компилируется и запускается командой EX TP ):




.NList SEQ, LOC

TPS =: 176730
TPD =: 176732

Buffer =: 20000

Start:

Clr R0
Mov #Buffer, R1
Mov #TPS, R2
Mov #TPD, R3

BiT #40, (R2)
BNE 1$
Halt
1$:
Mov #33407, (R3)
Mov #1, (R2)
2$:
BiT #40, (R2)
BEq 2$
BiT #10, (R2)
BEq 7$
MovB (R3), R4
BMi 6$
Halt
6$:
ASR R4
BCC 7$
Halt
7$:
Mov #2, (R3)
Mov #1, (R2)
4$:
BiT #60, (R2)
BNE 3$
BiT #10, (R2)
BEq 4$
MovB (R3), (R1)+
Inc R0
Br 4$
3$:
Halt

.End Start

Andrey_Ak
28.03.2011, 16:02
А как я под RT11 посмотрю дамп памяти?
Кстати, я использую вместо терминала ПиСи,
как бы сделать чтоб коды вводились автоматически?
там можно послать текстовый файл, но я не могу в
этом файле ввести код ПС и ВК

Patron
28.03.2011, 16:51
По завершении - программа выполняет команду Halt и вываливается в пульт для просмотра результатов.

...


как бы сделать чтоб коды вводились автоматически?
там можно послать текстовый файл, но я не могу в
этом файле ввести код ПС и ВК Смысл этих слов до меня не дошёл.

Желательно иметь более подробное описание проблемы.

Andrey_Ak
29.03.2011, 05:47
@1000G 001042
@R0/000000
R1/020000
R2/176730
R3/176732
R4/040174
R5/000030
R6/177446
R7/001042
R0/000000
@
@176730/000050
176732/000066
176734/
BUS ERROR
@

---------- Post added at 07:14 ---------- Previous post was at 07:12 ----------

@
@1000/005000
001002/012701
001004/020000
001006/012702
001010/176730
001012/012703
001014/176732
001016/032712
001020/000040
001022/001001
001024/000000
001026/012713
001030/033407
001032/012712
001034/000001
001036/032712
001040/000040
001042/001775
001044/032712
001046/000010
001050/001406
001052/111304
001054/100401
001056/000000
001060/006204
001062/103001
001064/000000
001066/012713
001070/000002
001072/012712
001074/000001
001076/032712
001100/000060
001102/001006
001104/032712
001106/000010
001110/001772
001112/111321
001114/005200
001116/000767
001120/000000
@

---------- Post added at 07:47 ---------- Previous post was at 07:14 ----------

@1000G 001026
@
@R0/001100
R1/020000
R2/176730
R3/176732
R4/000066
R5/177556
R6/177770
R7/001026
R0/001100
@
@176730/000054
176732/000066
176734/
BUS ERROR
@

Patron
29.03.2011, 16:07
Интересно, что должно произойти, чтобы выполнение команды BiT #40, (R2) ( расположенной по адресу 01036 ) привело к вылету в пульт (адрес останова 01042), при том что R2 == 176730 , а 176730 == 050 ...

Для продолжения выполнения программы нужно вручную открыть регистр 176730, убедиться, что бит 040 установлен и продолжить выполнение программы командой пульта "P".

Второй прогон остановился штатно ( адрес останова 01026 ). Этот адрес останова означает, что в регистре 176730 не установлен бит 040 .

Для продолжения выполнения программы нужно вручную открыть регистр 176730, убедиться, что бит 040 установлен и продолжить выполнение программы командой пульта "P".

Andrey_Ak
05.04.2011, 20:22
Вообщем так,

020004/000777
020006/000777
020010/000777
020012/000777
@
@
@
@1000G 001060
@176730/000040
176732/000066
176734/
BUS ERROR
@176730/000040 1
@P 001122
@1\
@20000/000001
020002/000666
020004/000666

---------- Post added at 21:40 ---------- Previous post was at 21:34 ----------

@1000G 001060
Ничего не происходит
@P 001122
Ничего не происходит
@1000G 001060
Ничего не происходит
@P 001122
@P 001124
Ничего не происходит
@1000G 001060
Ничего не происходит

В 20000 ничего не меняется, ленту не читает...

Если сделать так, то читает и правильно:

@20000/000777

@1000G 001060
@176730/000040 1
@P 001122

@20000/000001
020002/000666
020004/000666

---------- Post added at 21:52 ---------- Previous post was at 21:40 ----------

Похоже что программа слишком быстро вводит данные в контроллер,
который не успевает отрабатывать команды...

Если вместо кода чтения 033407 ввести код 7, то все работает точно
так-же как и с кодом 033407...

@20000/000777
020002/000777
020004/000777
020006/000000
........./000000
023770/000000
023772/000777
023774/000777
023776/000777
024000/000000
@
@
@1030/033407 7
@
@1030/000007
@
@1000G 001060
@
Ленту не прочитал
@176730/000040 1
Ленту прочитал
@P 001122
@
@20000/000001
020002/000666
020004/000666
020006/000666
........../000666
023772/000666
023774/000666
023776/000666
024000/000000
024002/177777
@

---------- Post added at 22:16 ---------- Previous post was at 21:52 ----------

Еще раз проверил:

@500/010021
000502/077202
000504/000000
R0/000777
R1/000506
R2/000000
500G

@017770/000777
017772/000777
017774/000777
017776/000777
020000/000777
020002/000777
020004/000777

....../000777

023774/000777
023776/000777
024000/000777
024002/000777
024004/000777
024006/000777
024010/000777
024012/000777
024014/000777
024016/000777
024020/000777
024022/000777
024024/000777


@1000/005000
001002/012701
001004/020000
001006/012702
001010/176730
001012/012703
001014/176732
001016/032712
001020/000040
001022/001001
001024/000000
001026/012713
001030/000007
001032/012712
001034/000001
001036/032712
001040/000040
001042/001775
001044/032712
001046/000010
001050/001406
001052/111304
001054/100401
001056/000000
001060/006204
001062/103001
001064/000000
001066/012713
001070/000002
001072/012712
001074/000001
001076/032712
001100/000060
001102/001006
001104/032712
001106/000010
001110/001772
001112/111321
001114/005200
001116/000767
001120/000000

@1000G 001060
@

Ленту не прочитал

@176730/000040 1
@

Ленту прочитал

@20000/000777
@23776/000777
@
@P 001122
@
@20000/000001
020002/000666
020004/000666
....../000666
023772/000666
023774/000666
023776/000666
024000/000777
024002/000777
@

---------- Post added at 22:22 ---------- Previous post was at 22:16 ----------

Читаем дальше:

@1000G 001060
@
@176730/000040 1
@
@P 001122
@
@20000/000002 (Причитал второй блок с ленты)
020002/000666
020004/000666

@1000G 001060
@
@176730/000040 1
@
@P 001122
@
@20000/000003 (Причитал третий блок с ленты)
020002/000666
020004/000666

@1000G 001060
@
@176730/000040 1
@
@P 001122
@
@20000/000004 (Причитал четвертый блок с ленты)
020002/000666
020004/000666

Patron
05.04.2011, 21:33
1. По логике работы контроллера (как я её сейчас понимаю) - записывать вручную "1" в регистр 176730 не обязательно. Всё должно работать точно так же, если просто нажать "P" после останова по адресу 01060.

2. Останов по адресу 01060 - это признак того, что после подачи первого кода команды чтения ( 33407 -> 176732 ; 1 -> 176730 ) контроллер не установил бит 0200 в регистре 176732.

Предлагаю во время очередного прогона и останова по адресу 01060 - открыть регистр контроллера 176732 и регистр процессора R4, чтобы сравнить их содержимое ( записывать туда ничего не надо ). Затем - нажать "P".

Andrey_Ak
05.04.2011, 21:37
1. По логике работы контроллера (как я её сейчас понимаю) - записывать вручную "1" в регистр 176730 не обязательно. Всё должно работать точно так же, если просто нажать "P" после останова по адресу 01060.

2. Останов по адресу 01060 - это признак того, что после подачи первого кода команды чтения ( 33407 -> 176732 ; 1 -> 176730 ) контроллер не установил бит 0200 в регистре 176732.

Предлагаю во время очередного прогона и останова по адресу 01060 - открыть регистр 176732, чтобы проверить его содержимое ( записывать туда ничего не надо ). Затем - нажать "P".

- В 176732 вроде как помню было 66 просто на P не помогает...

Patron
05.04.2011, 21:39
В точке останова 01060 - программа копирует младший байт регистра 176732 в R4 и затем проверяет бит знака R4 ( бит 0200 должен расшириться на старший байт R4 ).

Предлагаю в момент останова сравнить содержимое 176732 и R4.

Andrey_Ak
05.04.2011, 21:44
В точке останова 01060 - программа копирует содержимое регистра 176732 в R4 и затем проверяет бит 0200.

Предлагаю в момент останова сравнить содержимое 176732 и R4.

может слишком быстро проверяет этот бит? Контроллер не успевает одуплится..

Patron
05.04.2011, 21:50
Вот поэтому я и предлагаю сравнить то значение, которое программа скопировала в R4 для проверки бита 0200 ( открыв R4 после вылета в пульт ) - с тем значением, которое будет на тот момент в регистре 176732 (т.е. спустя уже несколько секунд).

Andrey_Ak
05.04.2011, 22:23
Вот поэтому я и предлагаю сравнить то значение, которое программа скопировала в R4 для проверки бита 0200 ( открыв R4 после вылета в пульт ) - с тем значением, которое будет на тот момент в регистре 176732 (т.е. спустя уже несколько секунд).

@
@1000G 001060
@176732/000066
@R4/000066
@

Patron
05.04.2011, 23:00
И если в этот момент нажать "P" ( ничего дополнительно не записывая в 176730 ) - то ленту прочитает ?

Andrey_Ak
05.04.2011, 23:01
И если в этот момент нажать "P" ( ничего дополнительно не записывая в 176730 ) - то ленту прочитает ?

- Нет, не прочитает...

Patron
05.04.2011, 23:21
Если после нажатия "P" лента не читается - значит всё идёт в рамках ранее определённой нами логики контроллера: нет бита 200 в регистре 176732 - значит первый код команды чтения ( 33407 ) контроллером не выполнен.

Теперь нужно понять, почему контроллер не выполняет первый код команды чтения.

В драйвере ПЗУ - команды

Mov #33407,@#176732
Mov #1,@#176730

идут прямо друг за другом.

Поэтому здесь большая задержка точно не нужна.

Возможно, как-то "мешается" предыдущее непрочитанное значение в 176732. И из-за этого код команды с первого раза не проходит.

Чтобы это проверить - предлагаю повторить прогон ещё раз. При этом - после останова по адресу 01060:

1. Открыть 176732
2. Открыть 176730
3. Записать 1 в 176730
Подождать пару секунд.
4. Открыть 176732
5. Нажать "P"

Идея в том, чтобы проверить, установится ли бит 0200 в регистре 176732 после ручной записи "1" в регистр 176730.

Andrey_Ak
05.04.2011, 23:38
Сейчас проверю..

---------- Post added at 01:38 ---------- Previous post was at 01:23 ----------

@
@1000G 001060
@176732/000066
@176730/000040 1 (Прочитал ленту)
@176732/000200
@
@20000/000000
@P 001122
@20000/000001
020002/000666
020004/000666
@

Patron
05.04.2011, 23:44
Теперь слегка модифицируем нашу программу, чтобы подавать первый код команды вручную.



001000/005000
001002/012701
001004/020000
001006/012702
001010/176730
001012/012703
001014/176732
001016/032712
001020/000040
001022/001001
001024/000000
001026/012713 / 000
001030/000007 / 240
001032/012712 / 240
001034/000001 / 240
001036/032712
001040/000040
001042/001775
001044/032712
001046/000010
001050/001406
001052/111304
001054/100401
001056/000000
001060/006204


После запуска программа выполнит останов по адресу 01030, после чего нужно вручную:

1. Записать "7" в регистр 176732
2. Записать "1" в регистр 176730
3. Нажать "P"

Andrey_Ak
05.04.2011, 23:47
@
@1000G 001030
@176732/000066 7
@176730/000040 1 (Прочитал ленту)
@P 001122
@20000/000001
020002/000666
020004/000666
@

Patron
05.04.2011, 23:56
Значит, есть только два варианта "улучшения" нашей реализации алгоритма чтения:

1. Читать 176732 перед записью.
2. Вставить для задержки пару команд типа Cmp @#0,@#0 между записью 7 в 176732 и 1 в 176730.

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

Сделаю их завтра :)

Andrey_Ak
05.04.2011, 23:57
Хорошо, спасибо!

Patron
06.04.2011, 14:58
Вот новая версия программы:




.NList SEQ, LOC

TPS =: 176730
TPD =: 176732

Buffer =: 20000

Start:

Clr R0 ; 005000
Mov #Buffer, R1 ; 012701
; 020000
Mov #TPS, R2 ; 012702
; 176730
Mov #TPD, R3 ; 012703
; 176732
BiT #40, (R2) ; 032712
; 000040
BNE 1$ ; 001001
Halt ; 000000
1$:
MovB (R3), R4 ; 111304
Cmp @#240,@#240 ; 023737
; 000240
; 000240
Mov #7, (R3) ; 012713
; 000007
Cmp @#240,@#240 ; 023737
; 000240
; 000240
Mov #1, (R2) ; 012712
; 000001
2$:
BiT #40, (R2) ; 032712
; 000040
BEq 2$ ; 001775
BiT #10, (R2) ; 032712
; 000010
BEq 7$ ; 001406
MovB (R3), R4 ; 111304
BMi 6$ ; 100401
Halt ; 000000
6$:
ASR R4 ; 006204
BCC 7$ ; 103001
Halt ; 000000
7$:
Mov #2, (R3) ; 012713
; 000002
Mov #1, (R2) ; 012712
; 000001
4$:
BiT #60, (R2) ; 032712
; 000060
BNE 3$ ; 001006
BiT #10, (R2) ; 032712
; 000010
BEq 4$ ; 001772
MovB (R3), (R1)+ ; 111321
Inc R0 ; 005200
Br 4$ ; 000767
3$:
Halt ; 000000

.End Start
;


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

Это тоже нужно будет проверить.

...

В настоящее время нам известны следующие коды команд:


00 - сброс контроллера (?)
01 - ...
02 - чтение буфера контроллера
03 - перемотка ленты на начало
04 - запись маркера "Tape Mark"
05 - ...
06 - ...
07 - чтение блока ленты в буфер
10 - перемотка ленты на файл назад
11 - перемотка ленты на файл вперёд
12 - перемотка ленты на блок назад
13 - перемотка ленты на блок вперёд

Patron
06.04.2011, 16:48
Похоже, что при записи всех магнитных лент такого типа используется общий формат файлов, описанный в стандарте ANSI Standard X3.27–1978, File Structure and Labeling of Magnetic Tapes for Information Interchange.

Операционные системы фирмы DEC используют подмножество этого стандарта с ограничением на размер блока в 512 байт.



ВСЯ ИНФОРМАЦИЯ НА МАГНИТНОЙ ЛЕНТЕ РАСПОЛОЖЕНА В ЛОГИ-
ЧЕСКИХ БЛОКАХ.

МАГНИТНАЯ ЛЕНТА В СИСТЕМЕ ИМЕЕТ СТАНДАРТНЫЙ НАБОР
МЕТОК, КОТОРЫЙ НЕОБХОДИМ ДЛЯ УПРАВЛЕНИЯ ДАННЫМИ. В МЕТКАХ
НАХОДИТСЯ ИНФОРМАЦИЯ, ИСПОЛЬЗУЕМАЯ ДЛЯ КОНТРОЛЯ. НАПРИМЕР,
В МЕТКЕ МОЖЕТ СОДЕРЖАТЬСЯ ЧИСЛО БЛОКОВ В ФАЙЛЕ. ПОСЛЕ РАБО-
ТЫ С ФАЙЛОМ МОЖЕТ БЫТЬ ПРОИЗВЕДЕНА ПРОВЕРКА КОЛИЧЕСТВА
ИМЕЮЩИХСЯ В ФАЙЛЕ БЛОКОВ С УКАЗАННЫМ В МЕТКЕ. НЕСОВПАДЕНИЕ
ЭТИХ ДВУХ ЗНАЧЕНИЙ В НЕКОТОРЫХ СЛУЧАЯХ УКАЗЫВАЕТ НА ОШИБКУ
ПРИ ОБРАБОТКЕ ФАЙЛА.

СТАНДАРТНЫЕ МЕТКИ:

МЕТКА ТОМА (VOL1)
- МАГНИТНАЯ ЛЕНТА В СИСТЕМЕ ИМЕЕТ ТОЛЬКО ОДИН ТОМ;
НЕ ИСПОЛЬЗУЕТСЯ МЕТКА КОНЦА ТОМА EOV, ПОЭТОМУ
НЕЛЬЗЯ РАСПОЛАГАТЬ ФАЙЛ НА ДВУХ ЛЕНТАХ;

ЛЕНТОЧНЫЙ МАРКЕР (*)
- МЕТКИ ОТ ДАННЫХ ОТДЕЛЯЮТСЯ ЛЕНТОЧНЫМ МАРКЕРОМ; ДВА
ЛЕНТОЧНЫХ МАРКЕРА ОЗНАЧАЮТ ЛОГИЧЕСКИЙ КОНЕЦ ЛЕНТЫ;

МЕТКА НАЧАЛА ФАЙЛА (HDR1)
- МЕТКА СОДЕРЖИТ ВСЮ НЕОБХОДИМУЮ ИНФОРМАЦИЮ О ФАЙЛЕ,
ЗА ИСКЛЮЧЕНИЕМ ДЛИНЫ ФАЙЛА; ДЛИНА ФАЙЛА РАВНА 0;

МЕТКА КОНЦА ФАЙЛА (EOF1)
- МЕТКА ПОЛНОСТЬЮ ПОВТОРЯЕТ ИНФОРМАЦИЮ, СОДЕРЖАЩУЮСЯ
В МЕТКЕ HDR1, ЗА ИСКЛЮЧЕНИЕМ ДЛИНЫ ФАЙЛА; ДЛИНА
РАВНА ЧИСЛУ БЛОКОВ ДАННЫХ;

МЕЖБЛОЧНЫЙ ПРОМЕЖУТОК
- СЛУЖЕБНАЯ ЗАПИСЬ, РАЗДЕЛЯЮЩАЯ БЛОКИ ДАННЫХ МЕЖДУ
СОБОЙ; НЕОБХОДИМА ДЛЯ РАЗГОНА И ОСТАНОВА БОБИНЫ
МАГНИТНОЙ ЛЕНТЫ ПРИ СЧИТЫВАНИИ ИЛИ ЗАПИСИ ИНФОРМА-
ЦИИ.

СИСТЕМНЫЕ ПРОГРАММЫ DIR, DUP, PIP И Т.Д. ОСУЩЕСТВЛЯЮТ
ЗАПИСЬ НА ЛЕНТУ ИЛИ СЧИТЫВАНИЕ ПОБЛОЧНО, Т.Е. ЗАПИСЯМИ ПО
512 БАЙТ.

ФАЙЛ, СОЗДАННЫЙ НА МАГНИТНОЙ ЛЕНТЕ, ИМЕЕТ ВИД:

HDR1 * ДАННЫЕ * EOF1 *

ТОМ, СОДЕРЖАЩИЙ ОДИН ФАЙЛ, ИМЕЕТ ФОРМАТ:

VOL1 HDR1 * ДАННЫЕ * EOF1 * * *

ТОМ, СОДЕРЖАЩИЙ ДВА ФАЙЛА, ИМЕЕТ ФОРМАТ:

VOL1 HDR1 * ДАННЫЕ * EOF1 * HDR1 * ДАННЫЕ * EOF1 * * *

МАГНИТНАЯ ЛЕНТА, КОТОРАЯ БЫЛА ИНИЦИАЛИЗИРОВАНА, ИМЕЕТ
СЛЕДУЮЩИЙ ФОРМАТ:

VOL1 HDR1 * * EOF1 * * *

НАЧАЛЬНЫЙ ЗАГРУЗЧИК МАГНИТНОЙ ЛЕНТЫ ТОМА ИМЕЕТ ФОРМАТ:

VOL1 МBOOT HDR1 * ДАННЫЕ * EOF1 * * *

ПРИ СОЗДАНИИ ЗАГРУЗЧИКА НА МАГНИТНОЙ ЛЕНТЕ ФАЙЛ
MBOOT.BOT (ПЕРВИЧНЫЙ ЗАГРУЗЧИК) ДОЛЖЕН ИСПОЛЬЗОВАТЬСЯ ДЛЯ
КОПИРОВАНИЯ ВТОРИЧНОГО ЗАГРУЗЧИКА МАГНИТНОЙ ЛЕНТЫ. ПЕРВЫЙ
ФАЙЛ, КОТОРЫЙ ДОЛЖЕН БЫТЬ ЗАПИСАН ПОСЛЕ ПЕРВИЧНОГО ЗАГРУЗ-
ЧИКА (МBOOT), ЭТО MSBOOT.BOT, КОТОРЫЙ СОДЕРЖИТ ВТОРИЧНЫЙ
ЗАГРУЗЧИК МАГНИТНОЙ ЛЕНТЫ. ПЕРВИЧНЫЙ ЗАГРУЗЧИК ЗАНИМАЕТ
ОДИН БЛОК (512 БАЙТОВ).

КАЖДАЯ МЕТКА НА МАГНИТНОЙ ЛЕНТЕ ИСПОЛЬЗУЕТ ТОЛЬКО ПЕР-
ВЫЕ 80 БАЙТОВ (ИЗ ЗАНИМАЕМЫХ 512 БАЙТОВ), И КАЖДЫЙ БАЙТ В
МЕТКЕ СОДЕРЖИТ ИНФОРМАЦИЮ В СИМВОЛЬНОМ КОДЕ. ИНФОРМАЦИЯ,
СОДЕРЖАЩАЯСЯ В МЕТКЕ ТОМА, ПРЕДСТАВЛЕНА В ТАБЛ. 9.

ТАБЛИЦА 9

ФОРМАТ МЕТКИ ТОМА (VOL1)

-------------------------------------------------------
! !ДЛИНА ! ЗНАЧЕНИЕ ПОЛЯ
ПОЗИЦИЯ !ИМЯ ПОЛЯ!ПОЛЯ, ! (ПО УМОЛЧАНИЮ ЗАПИСЫВАЕТСЯ
ПОЛЯ ! !БАЙТЫ ! В КОДЕ КОИ-7)
-------------------------------------------------------
!ИДЕНТИ- ! 3 !
!ФИКАТОР ! !
1 - 3 ! (ID) ! ! VOL
! МЕТКИ ! !
----------!--------!------!----------------------------
4 ! НОМЕР ! 1 ! 1
! МЕТКИ ! !
----------!--------!------!----------------------------
! ! ! RAFOS, ЗА КОТОРЫМ СЛЕДУЕТ
5 - 10 ! ID ТОМА! 6 ! ОДИН ПРОБЕЛ (МЕТКА ТОМА),
! ! ! ЕСЛИ НЕТ, ТО ID ТОМА
----------!--------!------!----------------------------
11 ! ! 1 ! ПРОБЕЛ
----------!--------!------!----------------------------
! НЕ ! !
12 - 37 ! ИСПОЛЬ-! 26 ! ПРОБЕЛЫ
! ЗУЕТСЯ ! !
----------!--------!------!----------------------------
38 - 50 !ID ПОЛЬ-! 13 ! С 38 ПО 40 ID D&B;
!ЗОВАТЕЛЯ! ! С 41 ПО 50 ID ПОЛЬЗОВАТЕЛЯ
! ! ! ИЛИ ПРОБЕЛЫ
----------!--------!------!----------------------------
!СТАНДАР-! !
51 ! ТНАЯ ! 1 ! 1
! ВЕРСИЯ ! !
! СИСТЕМЫ! !
----------!--------!------!----------------------------
! НЕ ! !
52 - 79 !ИСПОЛЬ- ! 28 ! ПРОБЕЛЫ
! ЗУЕТСЯ ! !
----------!--------!------!----------------------------
!СТАНДАР-! !
80 ! ТНАЯ ! 1 ! 3
! ВЕРСИЯ ! !
! МЕТКИ ! !

ИНФОРМАЦИЯ, СОДЕРЖАЩАЯСЯ В МЕТКЕ ФАЙЛА, ПРЕДСТАВЛЕНА В
ТАБЛ. 10.

ТАБЛИЦА 10

ФОРМАТ МЕТКИ ФАЙЛА (HDR1)

-------------------------------------------------------
! !ДЛИНА ! ЗНАЧЕНИЕ ПОЛЯ
ПОЗИЦИЯ !ИМЯ ПОЛЯ !ПОЛЯ, !(ПО УМОЛЧАНИЮ ЗАПИСЫВАЕТСЯ
ПОЛЯ ! !БАЙТЫ ! В КОДЕ КОИ-7)
-------------------------------------------------------
1 - 3 !ID МЕТКИ ! 3 ! HDR
----------!---------!------!---------------------------
4 ! НОМЕР ! 1 ! 1
! МЕТКИ ! !
----------!---------!------!---------------------------
5 - 21 !ID ФАЙЛА ! 17 ! ИМЯ, РАЗДЕЛИТЕЛЬ (".")
! ! ! И ТИП
----------!---------!------!---------------------------
22 - 27 !ID ЗАПИСИ! 6 ! RAFOS, ЗА КОТОРЫМ СЛЕДУЕТ
! ФАЙЛА ! ! ОДИН ПРОБЕЛ
----------!---------!------!---------------------------
! НОМЕР ! !
28 - 31 ! СЕКЦИИ ! 4 ! 0001
! ФАЙЛА ! ! (В ВОСЬМЕРИЧНОМ ВИДЕ)
----------!---------!------!---------------------------
!ПОРЯДКО- ! ! ПЕРВЫЙ ФАЙЛ ИМЕЕТ НОМЕР
32 - 35 !ВЫЙ НОМЕР! 4 ! 0001; НОМЕР СЛЕДУЮЩЕГО
! ФАЙЛА ! ! ФАЙЛА УВЕЛИЧИВАЕТСЯ НА 1;
! ! ! ПОСЛЕ ИНИЦИАЛИЗАЦИИ ЛЕНТЫ
! ! ! ЕГО ЗНАЧЕНИЕ РАВНО 0000
! ! ! (В ВОСЬМЕРИЧНОМ ВИДЕ)
----------!---------!------!---------------------------
! НОМЕР ! ! 0001
36 - 39 !ГЕНЕРАЦИИ! 4 ! (В ВОСЬМЕРИЧНОМ ВИДЕ)
----------!---------!------!---------------------------
! ВЕРСИЯ ! ! 00
40 - 41 !ГЕНЕРАЦИИ! 2 ! (В ВОСЬМЕРИЧНОМ ВИДЕ)
----------!---------!------!---------------------------
! ДАТА ! ! ПРОБЕЛ, ЗА КОТОРЫМ СЛЕДУ-
42 - 47 !СОЗДАНИЯ ! 6 ! ЕТ (ГОД * 1000 + ДЕНЬ)
----------!---------!------!---------------------------
! ДАТА ! ! ПРОБЕЛ, ЗА КОТОРЫМ СЛЕДУЮТ
48 - 53 !ОКОНЧАНИЯ! 6 ! ПЯТЬ НУЛЕЙ
----------!---------!------!---------------------------
54 ! МЕТОД ! 1 ! ПРОБЕЛ
! ДОСТУПА ! !
----------!---------!------!---------------------------
55 - 60 ! СЧЕТЧИК ! 6 ! 000000
! БЛОКОВ ! ! (В ВОСЬМЕРИЧНОМ ВИДЕ)
----------!---------!------!---------------------------
61 - 73 ! КОД ! 13 ! INERAFOS
! СИСТЕМЫ ! !
----------!---------!------!---------------------------
! НЕ ! !
74 - 80 ! ИСПОЛЬ- ! 7 ! ПРОБЕЛЫ
! ЗУЕТСЯ ! !


ПРИМЕЧАНИЕ. ДАТА СОЗДАНИЯ (DAT) ЗАПОМИНАЕТСЯ СЛЕДУЮЩИМ
ОБРАЗОМ:

DAT = Г * 1000 + Д (4.4)

ГДЕ

Г - ГОД;

Д - КОЛИЧЕСТВО ДНЕЙ ОТ НАЧАЛА ГОДА.

НАПРИМЕР, ДАТА 5.05.83. БУДЕТ ПРЕДСТАВЛЕНА В ВИДЕ

83 * 1000 + (31 + 28 + 31 + 30 + 5) = 83125

ЕСЛИ ДАТА ОТСУТСТВУЕТ, ТО ДАННЫЕ ПОЗИЦИИ ЗАПОЛНЯЮТСЯ НУЛЯМИ
(ПРИЧЕМ, ПЕРВЫМ СТОИТ ОДИН ПРОБЕЛ, ЗА КОТОРЫМ СЛЕДУЮТ ПЯТЬ
НУЛЕЙ).

МЕТКА КОНЦА ФАЙЛА (EOF1) ТОЧНО ТАКАЯ ЖЕ, КАК И МЕТКА
НАЧАЛА ФАЙЛА (HDR1), ЗА ИСКЛЮЧЕНИЕМ НЕСКОЛЬКИХ БАЙТОВ,
КОТОРЫЕ УКАЗАНЫ В ТАБЛ. 11.

ТАБЛИЦА 11

СТРУКТУРА МЕТКИ КОНЦА ФАЙЛА (EOF1)
-------------------------------------------------------
! !ДЛИНА ! ЗНАЧЕНИЕ ПОЛЯ
ПОЗИЦИЯ !ИМЯ ПОЛЯ!ПОЛЯ, ! (ПО УМОЛЧАНИЮ ЗАПИСЫВАЕТСЯ
ПОЛЯ ! !БАЙТЫ ! В КОДЕ КОИ-7)
-------------------------------------------------------
1 - 3 !ID МЕТКИ! 3 ! EOF
----------!--------!------!----------------------------
! ! !КОЛИЧЕСТВО БЛОКОВ ДАННЫХ,
! ! !СОДЕРЖАЩИХСЯ В ФАЙЛЕ (ЕСЛИ
55 - 60 ! СЧЕТЧИК! 6 !ФАЙЛ НЕ СОЗДАН МАКРОКОМАНДОЙ
! БЛОКОВ ! !.SPFUN); ПРИ СОЗДАНИИ ФАЙЛА
! ! !МАКРОКОМАНДОЙ .SPFUN СЧЕТЧИК
! ! !РАВЕН НУЛЮ; ЕСЛИ .SPFUN ПРИ
! ! !ЗАПИСИ ИСПОЛЬЗУЕТ БЛОКИ ПО
! ! !256 (ДЕСЯТИЧНОЕ) СЛОВ, ТО
! ! !СЧЕТЧИК БЛОКОВ УСТАНАВЛИВА-
! ! !ЕТСЯ КАК ОБЫЧНО

Patron
06.04.2011, 17:10
Magtape Label and Header Formats:



*** MTFMGR: DB MU0:, 256. Words, (Base 8) ***
047526 030514 052122 030461 020101 020040 020040 020040 *VOL1RT11A *
020040 020040 020040 020040 020040 020040 020040 020040 * *
020040 020040 042040 041045 020040 020040 020040 020040 * D%B *
020040 020061 020040 020040 020040 020040 020040 020040 * 1 *
020040 020040 020040 020040 020040 020040 020040 031440 * 3*

*** MTFMGR: DB MU0:, 256. Words, (Base 8) ***
042110 030522 042532 047522 042105 055056 055132 020040 *HDR1FILE.DAT *
020040 020040 051040 030524 040461 030040 030060 030061 * RT11A 00010 *
030060 030060 030060 030061 020060 030060 030060 020060 *001000100 00000 *
030060 030060 020060 030060 030060 030060 042504 051103 *00000 000000DECR*
030524 040461 020040 020040 020040 020040 020040 020040 *T11A *

** Tape Mark **

DATA AREA - 256-word fixed-length blocks. These blocks are exactly
the same as the disk files that they represent.

** Tape Mark **

*** MTFMGR: DB MU0:, 256. Words, (Base 8) ***
047505 030506 042532 047522 042105 055056 055132 020040 *EOF1FILE.DAT *
020040 020040 051040 030524 040461 030040 030060 030061 * RT11A 00010 *
030060 030060 030060 030061 020060 030060 030060 020060 *001000100 00000 *
030060 030060 020060 030060 030060 030060 042504 051103 *00000 000007DECR*
030524 040461 020040 020040 020040 020040 020040 020040 *T11A *

** Tape Mark **
** Tape Mark **
** Tape Mark **


Note that the 000007 in the EOF1 label indicates that there are 7 data blocks in the DATA AREA.

Andrey_Ak
06.04.2011, 21:57
Вот новая версия программы:



- А можно ее в кодах?

Patron
06.04.2011, 22:13
Если присмотреться внимательнее - коды там есть ( на месте комментариев ).

Andrey_Ak
06.04.2011, 22:23
Глюк...

Patron
06.04.2011, 22:32
Останов с адресом 01026 - признак того, что на момент начала работы программы - контроллер не имеет признака готовности, т.е. не установлен бит 040 в регистре 176730.

При останове по адресу 01026 нужно вручную открыть 176730 и убедиться, что там установлен бит 040 - и только затем нажать "P"

Andrey_Ak
07.04.2011, 02:00
@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
@

Patron
07.04.2011, 03:17
Останов по адресу 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

Andrey_Ak
07.04.2011, 11:45
@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 поэтому и не успевает обработать команду...

Patron
07.04.2011, 14:00
Думаю, что вместо задержки можно попробовать использовать бит 04 регистра 176730. Этот бит сбрасывается, когда контроллер готов к выполнению кода команды, записанного в 176732 ( т.е. в тот момент, когда нужно записывать "1" в 176730 ). После записи кода команды в 176732 можно вставить проверку сброса этого бита и не записывать "1" в 176730 до тех пор, пока бит 04 в 176730 установлен.



001042/023737 / 032712
001044/000240 / 000004
001046/000240 / 001375

Andrey_Ak
08.04.2011, 07:16
@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 ----------


Думаю, что вместо задержки можно попробовать использовать бит 04 регистра 176730. Этот бит сбрасывается, когда контроллер готов к выполнению кода команды, записанного в 176732 ( т.е. в тот момент, когда нужно записывать "1" в 176730 ). После записи кода команды в 176732 можно вставить проверку сброса этого бита и не записывать "1" в 176730 до тех пор, пока бит 04 в 176730 установлен.


- Скорее всего надо просто выдерживать паузу после записи команды
в 176732....

---------- Post added at 09:16 ---------- Previous post was at 09:15 ----------

В принципе читать получилось, надо-бы разобраться как писать... :)

Patron
08.04.2011, 14:50
Скорее всего надо просто выдерживать паузу после записи команды в 176732Делать паузу в 1000 раз более длинной, чем это необходимо - не всегда оправдано. Гораздо лучше (на мой взгляд) иметь универсальный алгоритм, который в любых условиях даёт гарантированный результат c минимальной задержкой.

Поэтому, предлагаю попробовать следующий вариант:



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



В принципе читать получилось, надо-бы разобраться как писать... :)Думаю, нет смысла заниматься записью до тех пор, пока драйвер TP.SYS для RT-11 ( который ещё нужно написать ) не начнёт нормально читать ленты.

Мне представляется, что следующим шагом должно стать исследование работы контроллера при чтении стандартной разметки ленты ( блок VOL1, блок HDR1, метка "Tape Mark", блоки данных, метка "Tape Mark", блок EOF1, метка "Tape Mark" ).

Весьма важно ( на мой взгляд ) выяснить, как контроллер сигнализирует о том, что вместо ожидаемого заголовка блока на ленте попался "Tape Mark". Не зная этого - невозможно отличить блок данных файла от метки конца файла ( метка конца файла по своей сути - это точно такой же блок данных ).

Для этого тестирования программу нужно модифицировать так, чтобы она подавала только команду "2" и копировала буфер контроллера в компьютер, а команда "7" подавалась вручную. Это даст возможность после каждой команды "7" проверять содержимое регистров 176730 и 176732, чтобы определить те биты, которые контроллер устанавливает там при обнаружении на ленте различных меток.

Затем нужно взять ленту, содержащую файлы RT-11 и пройтись по ней, выдавая вручную команды "7" и проверяя регистры.

Запуская программу копирования буфера в компьютер - нужно прежде всего проверять значение R0, где возвращается число скопированных байт. Для блоков по 512 байт это должно быть число 514 ( 2 байта номера блока + 512 байт данных ).

Andrey_Ak
06.03.2012, 23:17
Давайте продолжим эксперименты с контроллером? :)

Patron
07.03.2012, 20:39
Давайте продолжим эксперименты с контроллером?Думаю, что исследовать собственные форматы контроллера, которые он использует для записи/чтения данных - малоперспективно, т.к. отсутствует эталон для сравнения и мы просто не знаем, что именно должно писаться и читаться в этих режимах.

Если же поставить целью научиться читать и писать стандартные блоки данных, то (наверное) нужно записать на обычном контроллере тестовую ленту с точно известным содержимым блоков, а затем научиться читать её при помощи исследуемого контроллера.

...
P.S. Предлагаю также провести эксперимент по первой в мировой истории загрузке RT-11 в ДВК через telnet-интерфейс, с последующей работой блочного обмена системного устройства через терминальное telnet-подключение.

MiX
12.04.2014, 18:50
Документация на СМ5300.(если актуально)
http://www.tiffe.de/Robotron/CM5300/

Andrey_Ak
22.02.2016, 07:57
Может вернемся к теме оживления контроллера? На чем записать тестовую ленту есть...

Andrey_Ak
28.02.2016, 15:10
А если я выпаяю ПЗУ из этого контроллера и считаю его? Это как-то поможет?

bigral
28.02.2016, 23:22
По идее кроме ПЗУ еще схема нужна, особенно того узла который формирует сигналы для самого накопителя. Тогда суть работы контроллера можно будет както смоделировать в Proteus.

Интересно что для таких схем, а это по сути DSP высоких частот, обычно применялись секционированные процы. В военке как правило (про что свидетельствует литература затрагивающая серии 1800 1802 1804) да и в других контроллерах от pdp11. А тут применен достаточно медленный i8080 поэтому возникает вопрос или там плотность записи низкая или какая-нибудь хитрость есть... НО и "хитрости" на самой плате не видно, там где есть "хитрость" микросхем ставят гораздо больше, примеры это КЖД на 8x300 1818вм01 или RQDX1/2/3 на t11 с ихними огромными схемами с кучей регистров и автоматами состояний.

Andrey_Ak
06.04.2016, 06:27
Давайте продолжим эксперименты с контроллером?

dk_spb
06.04.2016, 13:31
Давайте. Никто не против.

MiX
15.04.2016, 22:07
Если интересно, есть страничка (http://www.4duker.ru/PDP/NML/NML.html) тестирования НМЛ.

AFZ
16.04.2016, 09:21
Интересно что для таких схем, а это по сути DSP высоких частот, обычно применялись секционированные процы. Это у контроллеров 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), как я уже говорил, оно займет очень мало места на плате итогового изделия, так, что туда, кроме него и модуля МПИ запросто влезет что-нибудь еще.

vazman
25.05.2017, 09:51
Тема заглохла? Никто не пытается повторить контроллер? Хотелось бы подключить СМ5300.01 к ДВК. но мне с этим точно не справиться..

- - - Добавлено - - -

И купить же контроллер нереально?

Andrey_Ak
25.05.2017, 17:32
Повторить мои контроллеры то можно попробовать, только смысл? Они же не стандартные..

vazman
25.05.2017, 19:18
понятно. А стандартные есть?

AFZ
26.05.2017, 06:03
понятно. А стандартные есть?Стандартный - это здоровенный ящик с кучей плат, от которого идут шнурки к НМЛ и к адаптеру, вставляемому в Э-60/ДВК. Или даже шурок с МПИ, точно уже не помню.

Ходили еще самопалы от новосибирского СКБ НП, на "половинке" (на секционных микропроцессорах 1804, во девичестве Am2900, если не врет мой склероз), но они, скорее всего, давно все сдохли и восстановлению не подлежат. Так, что "при наличии отсутствия" этого ящика, единственный доступный вариант - взять многоногий микроконтроллер и сваять аналог этого ящика на нем. Особых сложностей там быть не должно, но работы много.

form
26.05.2017, 06:26
Стандартный - это здоровенный ящик
Стандартный кроме всего прочего вроде как только UNIBUS...

AFZ
26.05.2017, 07:08
Нет, был, вроде-бы, вариант для МПИ. 15ВУМС же встречались с НМЛ?..

form
26.05.2017, 07:12
Нет, был, вроде-бы, вариант для МПИ.
У нас был, я даже програмил ПЗУшку с загрузчиками где был MT. Но у буржуев вроде Q-Bus варианта не было.

AFZ
26.05.2017, 07:17
У нас был, я даже програмил ПЗУшку с загрузчиками где был MT. Так напомни, туда МПИ засовывался, или МПИ был на плате адаптера, а к ящику шел шнур с собственным интерфейсом? А то я ничего не помню, видел всего один раз и не уверен, самопал то или штатное...

vazman
26.05.2017, 07:45
Вот как всё оказалось сложно. А я прикупил как раз накопитель.. Самопал на микроконтроллере мне не осилить.. Вот бы кто взялся.. Я бы материально поучавствовал..

Andrey_Ak
26.05.2017, 11:14
Стандартный - это здоровенный ящик с кучей плат, от которого идут шнурки к НМЛ и к адаптеру, вставляемому в Э-60/ДВК. Или даже шурок с МПИ, точно уже не помню.

Да, все верно, И кабель именно МПИ. Такой то есть, только вот делать его реплику нет смысла. И у меня на него схем нет. А доки есть.


Ходили еще самопалы от новосибирского СКБ НП, на "половинке" (на секционных микропроцессорах 1804, во девичестве Am2900, если не врет мой склероз), но они, скорее всего, давно все сдохли и восстановлению не подлежат. Так, что "при наличии отсутствия" этого ящика, единственный доступный вариант - взять многоногий микроконтроллер и сваять аналог этого ящика на нем. Особых сложностей там быть не должно, но работы много.

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

Так что пока реплику не с чего делать..

- - - Добавлено - - -


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

МПИ, полу-плата K2, со шлейфом из корзины Эл.60 к такой-же полу-плате К2 но уже в корзину НМЛ..

dk_spb
26.05.2017, 11:33
У меня есть две полноразмерных платы К01 и К02. Одна из них - контроллер для СМ5400, другая - для СМ5300.
Но я с ними еще не разбирался и непонятно когда руки дойдут.
Также есть контроллер для СМ5400 и СМ5300 в составе Искра-226. Но тоже пока ждут своей очереди.

Andrey_Ak
26.05.2017, 11:53
У меня есть две полноразмерных платы К01 и К02. Одна из них - контроллер для СМ5400, другая - для СМ5300.
Но я с ними еще не разбирался и непонятно когда руки дойдут.
Также есть контроллер для СМ5400 и СМ5300 в составе Искра-226. Но тоже пока ждут своей очереди.

Да, я помню что есть.. )) Только вот когда это будет не известно.. Может и через 5-10 лет..

MiX
26.05.2017, 12:00
У меня есть две полноразмерных платы К01 и К02.
Фото можно?
Со своей стороны, могу сфоткать контроллер на К589ИК02 (4шт.), К589ИК02 (1шт.) и разъёмом СНО53-60. По виду самопал но делался в условиях завода.

dk_spb
26.05.2017, 12:06
Фото я уже на этом форуме пару раз выкладывал:
К01 на четырех 1804ВС1, двух 1804ВУ2, четырех РТ5 и одной РТ1; СНО53-60
К02 на четырех 1804ВС1, одной 1804ВУ4, пяти РТ18; СНО53-60

- - - Добавлено - - -


Только вот когда это будет не известно.. Может и через 5-10 лет..
Пока всё упирается в место и отсутствие свободного времени.

Andrey_Ak
26.05.2017, 12:28
Пока всё упирается в место и отсутствие свободного времени.

Да у меня точно так-же.. Наверно когда стану совсем старым и на пенсию пойду, тогда время появится.. :)

vazman
26.05.2017, 15:21
Во.. немного задвигалось :)

MM
26.05.2017, 17:39
Могу посоветовать радикально пропатчить новодел КМД-МУ, со сменой 1801ВП1-128 на парочку 580ВВ55, и по программной части типа такого.
Адрес на МПИ тоже сменить ( это не сложно ).
В основном главная задача будет - это согласование стоимости софта, и поиск писателя.

form
26.05.2017, 18:30
Так напомни, туда МПИ засовывался, или МПИ был на плате адаптера, а к ящику шел шнур с собственным интерфейсом?
Я плохо помню MT на Э60, но вроде был просто контроллер и с него сразу магнитофон.
К слову, тот контроллер, что в старте темы фигурирует при ближайшем рассмотрении кажется стандартным контроллером, посаженным за некий мост который ему передает команды. Контроллер берет параметры из памяти, но этот блок в памяти совпадает с обычным значением регистров стандартного контроллера...

xailar
26.05.2017, 21:57
form, может и глупый вопрос - может как то можно помеять адреса и регистры в контроллере , которые есть у андрея на какие то стандартные - и повторить плату

form
27.05.2017, 03:36
помеять адреса и регистры
У него совсем другой принцип - два регистра через которые передается блок памяти, а уже этот блок памяти хранит то, что в стандартном контроллере раскладывается по разным регистрам.
Кстати в нем еще ошибка была в - он иногда выдает прерывания когда не должен (и судя по коду разбиравшейся прошивки, это известная проблема).

vazman
27.05.2017, 16:07
Получается - самое простое для оживления ленточного накопителя - создание новой платы на современном микроконтроллере?

AFZ
28.05.2017, 05:35
Ну пусть будут самопалы, не важно, главное чтоб адрес на шине и команды соответствовали стандартному. У СКБ-НП=шного все совпадало, он весело работал со стандартным драйвером MT, единственный его недостаток - он очень сильно грелся. Система охлаждения ДВК с ним не справлялась, все было очень горячим, в результате они очень быстро дохли. Я видел их штук 5, все они сдохли в течение полугода-года. Как и 4 шт.одноплатных контроллеров RK, таких, как у тебя, тоже были кипячеными и тоже передохли.


Со своей стороны, могу сфоткать контроллер на К589ИК02 (4шт.), К589ИК02 (1шт.) и разъёмом СНО53-60. По виду самопал но делался в условиях завода.А может это и есть тот самый, от СКБ НП? Сфоткай, может узнаю? Я хорошо помню, что их (СКБ НП) контроллер RK был на нашем клоне Am2900 (1804, да?), а вот MT помню только, что тоже на секционных МП, а на каких - не очень. 589ИК01-02 - это же клон Intel 3000, тоже секционный, только секции двухбитовые...


Я плохо помню MT на Э60, но вроде был просто контроллер и с него сразу магнитофон. Скорее всего, тот самый, СКБ-НП-шный. Это же ваше (новосибирское) СКБ.

А про ящик, в который заходит МПИ, Андрей напомнил, я такой тоже видел.

Скорее всего, RK для Э-60 был сделан точно так же: ящик, в котором где-то сбоку есть МПИ, к Э-60 подключается стандартным корзиночным соединителем или чем-то похожим. Да и в оригинале, скорее всего было точно так же...

AFZ
28.05.2017, 07:48
Получается - самое простое для оживления ленточного накопителя - создание новой платы на современном микроконтроллере? Похоже, да. Я бы делал не на одном МК, а на двух. Первый засунуть внутрь магнитофона, подключить его через согласователи уровней ко всем 32-34-или-сколько-их-там проводам управления этим магнитофоном и в нем сваять реализацию всех необходимых команд MT:. Связь со второй половиной контроллера лучше всего сделать через UART - минимум проводов, простые разъемы и т.п. Сюда пойдет, практически, любой современный МК с достаточным количеством ног и возможностью отладки "в железе" (по этому критерию не проходят AVR, отладчики для них - слишком дорогое удовольствие, а вот STM32 - в самый раз).

Вторая половина контроллера должна быть подключена к МПИ. Здесь все несколько сложнее - нужно точно эмулировать стандартный MT. То есть не обойтись без всех этих селекторов адресов, регистров, отработки прерываний и DMA. Из того, о чем я знаю, лучше всего сюда подходят PSoC от Cypress - на одном камне присутствуют простенькая ПЛИС и МК на ядре Cortex-Mx. Так вот, в ПЛИС прописываем всю эту ерунду с адресами, регистрами, прерываниями и пр., основное же делаем на МК - принимаем команды в эмулируемые регистры и передаем их в магнитофон через UART, получаем через DMA и передаем через тот же UART данные на запись, принимаем через тот же UART считанные данные и заносим их в память через DMA и, наконец, принимаем от первого контроллера состояние НМЛ, ленты и пр. и заносим его в эмулируемые регистры.

Работы много, но этого слона можно есть по кусочкам, точнее - в два приема: отдельно тот МК, который в НМЛ, отдельно - в МПИ. Первую половину можно делать на писюке - прицепить UART первого контроллера к компорту, скорости 115200 - за глаза! К тому же тут, в отличие от корзинки МПИ, не нужно соблюдать какие-либо конструктивные стандарты, можно купить на Али пробную платку с каким-нибудь STM32F103VET6 (блин, глянул, дорогие они, а дешевым с STM32F103C8T6 может не хватить нескольких ножек), довесить к ней упрощенные согласователи интерфейсов (длинного кабеля-то не будет) и вперед! Кое-кто чем-то подобным уже занимался, см., например, здесь (http://www.4duker.ru/PDP/NML/NML.html).

Со второй половиной может помочь присутствующий где-то здесь рядом Jarik65535, он с этими CyPress'ами "на ты".

А вариант переделки новодельного КМД, который предложил MM, не катит - это будет, опять же, самопал, несовместимый с оригиналом.


Да у меня точно так-же.. Наверно когда стану совсем старым и на пенсию пойду, тогда время появится. Ага, два раза! Я уже 2.5 года на пенсии, а времени как не было, так и нет, работать, один хрен, приходится...

MiX
28.05.2017, 11:54
Сфоткай, может узнаю?
http://s018.radikal.ru/i500/1705/35/0564b5be1447.jpg (http://radikal.ru)

- - - Добавлено - - -


Ага, два раза! Я уже 2.5 года на пенсии, а времени как не было, так и нет, работать, один хрен, приходится...
А где работали до этого? Может чего то знаете, то чего мы не знаем?

AFZ
28.05.2017, 13:22
Похоже, оно! Правда то, что видел я, было без панелек, м/с были запаяны. Причем довольно странно - за самые кончики необрезанных выводов, из-за чего между стеклотекстолитом платы и корпусами м/с был заметный зазор. Вероятно, с хорошим дутьём оно охлаждалось нормально, а вот пара убогих ВВФ-73, стоящих на БПС-6-1, это дело не продувало ни разу!..

- - - Добавлено - - -


А где работали до этого? Может чего то знаете, то чего мы не знаем? Нет, ни у разработчиков, ни у производителей я не работал. Только пользовался. Ну, и сочинял специализированную периферию, для своих нужд. Всеми материалами, которые у меня были, я уже поделился, всё выложено. Ну, а касаясь знаний, если вдруг всплывает какой-то вопрос, по которому у меня есть, что сказать, я, обычно, высказываюсь...

vazman
02.06.2017, 10:04
Для начала - не подскажите - где и какую ленту(ы) к нему мона прикупить ( к 5300.01) ??

- - - Добавлено - - -

документация ссылается на ISO 1864-1975 :) а что это и с чем его едят :)

MiX
02.06.2017, 10:21
Например- https://www.avito.ru/sankt-peterburg/audio_i_video/lenta_magnitnaya_orwo_typ_425_1600_bpi_864022851

- - - Добавлено - - -

Ещё вариант- https://meshok.net/item/33790256_ORWO_made_in_GDR_Typ_425_1600_bpi_лен а_магнитная_новая

vazman
02.06.2017, 10:25
Попробую перекупить :)

vazman
09.06.2017, 16:54
засада. с авито не хотят слать в московскую область.. а на мешке не оказалось в наличии..
никто больше нигде не видел?? Или подскажите - как самому определять - подходит или нет.. какие параметры, что ли?

gfd71
28.09.2017, 10:17
вот здесь http://zx-pk.ru/threads/15363-kontroller-nml-sm5300-01.html?p=367250&viewfull=1#post367250 описано как использовать ИДА для ПЗУ.

Код начинается с адреса 0400 - выделяю несколько строк и, нажав правую кнопку мыши - выбираю [ Analyze selected area ].
а как то сохранить в текст проанализированное можно?
и есть пзу с программой под 589 контроллер, можно как то ИДА использовать для понимания работы программы?

Andrey_Ak
28.09.2017, 12:21
О.. ! Темка вроде шевелиться...

Только пока продвижение мало..

На полуплатном контроллере несколько команд известно.
Даже вроде читать и писать на ленту получалось..

Но так все на этом и затихло..

Patron
28.09.2017, 15:21
а как то сохранить в текст проанализированное можно?Можно прямо в окне выделить и скопировать через буфер обмена. Можно в меню "File" выбрать "Produce file" и далее, в каком виде сохранить.



есть пзу с программой под 589 контроллер, можно как-то ИДА использовать для понимания работы программы?Открыть в ИДА, дизассемблировать и читать полученный результат. Как я это делал - уже не помню, но раз я тогда научился - значит каждый сможет.

gfd71
28.09.2017, 17:55
Как я это делал - уже не помню, но раз я тогда научился - значит каждый сможет.
спасибо
а если никто не делал то я буду первым:)

MiX
08.10.2017, 14:03
Или подскажите - как самому определять - подходит или нет.. какие параметры, что ли?
Нашел Свемавскую, тип - Б 4502 12

Здесь. (https://meshok.net/item/50509570_Бобина_с_магнитной_лен той_для_накопителя_1975_год)

Случайность
09.10.2017, 14:24
я считывал пзу вот с такого, 8 штук РТ4

Что то не найти файлы, попробую тогда заново, если кому то надо


https://hostingkartinok.com/show-image.php?id=489be761a55e739eda81de82fc80701c

есть еще пустая плата, скорее от такого же, но с другим расположением микросхем

Скорее смысла собирать нет, где то писалось, это не стандартный контроллер, и он не будет работать

на этой плате есть вытравленые буквы ЛГС. На каких то платах я уже их видел, причем это были контроллеры тоже

скорее всего они имеют одно происхождение. скорее всего функционал и софт