Ещё немного уточнил код. Дальше нужны эксперименты с НМЛ.
Вид для печати
Ещё немного уточнил код. Дальше нужны эксперименты с НМЛ.
ааааа..... ГЫ..... :) :v2_yahoo: :v2_biggr:
если и сейчас ничего, то:
10000/ 000000
10002/ 000000
10004/ 000016
10006/ 000000
и опять вписать в 1740002 число 10000
- Перемотал ленту на начало.... :)
007776/000000
Инициализация:
10000/ 0
10002/ 0
10004/ 16
170002/000200 10000
Перемотал ленту на начало, после отработки:
170002/000200
7776/000140
10000/000000
10002/000000
10004/000016
Очислил с 007776 до 011000 все нулями
10000/ 174000
10002/ 10006
10004/ 102
170002/000200 10000
Прочитал кусочек ленты, после отработки:
170002/100200
007776/030100
010000/175060
010002/011066
010004/000102
010006/000240
010010/000415
010012/ - 010036/ = все нули
010040/041020
010042/116420
010044/000400
010046/000137
010050/000574
010052/ - 010214/ = все нули
010216/012703
010220/175000
010222/010023
010224/012723
010226/000000
010230/011322
010232/077102
010234/000207
010236/ - 010600/ = все нули
010602/ - 010646/ = код
010650/ - 011000/ = все нули
011002/ - 011064/ = непонятно в перемешку...
дальше уже память чистая
Смущает флаг ошибки в регистре команд и состояния ленты, а так вроде читает...
Прилагаю почти окончательную версию исходника, подправленный бинарник, и дамп для пробной загрузки в память.
Системная лента испорчена в самом начале, вспомнил, когда я забирал НМЛ,
именно эта бобина с меткой "Система" была в магнитофоне, и после 1 маркера
она помята, следовательно не читается...
Пишет ош. чтения мл 100272
Но на ленте есть второй маркер...
Попытался прочитать с него, долго грузился, потом
выдало ош. загрузки 100456
Проверил некоторые команды:
Из документации следует:
000 NOP
002READ
004 WRT
006 WFM
010 SFW
012 SRV
014 WEXG
016 RWD
Управление прерыванием:
100 - прерывание разрешено
Выбор накопителя:
0000 0 нулевое
0400 1 первое
1000 2
1400 3
1002\000000 177000 (-1000-BRC)
1004\000000 2000 (2000-CMA)
1006\000000 4 (WRITE- MTC)
170002\000200 1002 CR
-----------------------------------
А это проверено опытным путем:
10000/ 0
10002/ 0
10004/ 16 - Команда перемотки
170002/000200 10000
- Перематывает ленту на начало, если она была не в начале....
-------------
10000/ 177000 - Что это ?
10002/ 20000 - Адрес откуда писать
10004/ 4 - Команда записи
170002/000200 10000
- Пишет на ленту данные с адреса 20000, только не ясно какой длины....
--------------
10000/ 174000 - Что это ?
10002/ 30000 - Адрес куда писать
10004/ 2 - Команда чтения, В коде прошивки 102 надо исправить на 2!!!
170002/000200 10000
- Читает данные с ленты и пишет в адрес 30000, не ясно какой длины....
"Ошибка загрузки" означает, что файл с ленты прочитан успешно, но загрузчика не содержит (не начинается со слова 000240).
Число читаемых байт в дополнительном коде.
102 это чтение + разрешение прерываний (см.выше в описании).
2048 байт получается.
Переименовал некоторые константы и метки в тексте для лучшего соответствия смыслу...
- если 000002 - просто чтение, 000102 - чтение с прерыванием,
то как выбирать просто чтение накопителей 1 -3
и как чтение с прерыванием накопителей 1 -3 ?
---------- Post added at 08:26 ---------- Previous post was at 08:15 ----------
адрес 170002\170000-170006
очистка 170002\010001
старт 170002\ а
вектор 224
а-2
а:
а+2
а+4
- Это из описания на тот не рабочий НМЛ, скорее всего у меня тоже 224 вектор
Вектор скорее всего точно 224.
Номер накопителя, судя по этому фрагменту описания, задаётся в битах 8 и 9 слова, определяющего код операции.
Например, чтение с накопителя 1:
000402
Чтение с накопителя 3 с разрешением прерываний:
001502
Компоненты слова просто объединяются по ИЛИ...
А какой вообще принцип записи и чтения на НМЛ?
Интересует как узнать сколько всего блоков данных
записано на ленту, как узнать их размер?
и считать правильно?
Вот как я пытался прочитать ту ленту с дефектом,
и что из этого получилось, лог терминальной сессии:
Вложение 16361
Оказалось на системной ленте после второго маркера есть еще один
загрузчик... Сейчас спишу его в файл и выложу...
---------- Post added at 23:32 ---------- Previous post was at 23:32 ----------
Оказалось на системной ленте после второго маркера есть еще один
загрузчик... Сейчас спишу его в файл и выложу...
---------- Post added 01.03.2010 at 00:05 ---------- Previous post was 28.02.2010 at 23:32 ----------
@
@100000/174000 - Заносим в 100.000 длину блока для чтения (2048 байт)
100002/000000 - Адрес куда писать прочитанные данные
100004/000102 - Команда чтения с разрешением прерываний
@
@170002/000200 100000 - Заносим в регистр контроллера НМЛ адрес в памяти с командами
@ - НМЛ прочитал кусочек ленты
@170002/000200 - Состояние что НМЛ выполнил операцию без ошибок
@
@0/000240 - Прочитанный код с 0 адреса в памяти (Очевидно загрузчик)
000002/000415
000004/000000
000006/000000
000010/000000
000012/000000
000014/000000
000016/000000
000020/000000
000022/000000
000024/000000
000026/000000
000030/000000
000032/041020
000034/116420
000036/000400
000040/000137
000042/000574
000044/000000
000046/000000
000050/000000
000052/000000
000054/000000
000056/000000
000060/000000
000062/000000
000064/000000
000066/000000
000070/000000
000072/000000
000074/000000
000076/000000
000100/000000
000102/000000
000104/000000
000106/000000
000110/000000
000112/000000
000114/000000
000116/000000
000120/000000
000122/000000
000124/000000
000126/000000
000130/000000
000132/000000
000134/000000
000136/000000
000140/000000
000142/000000
000144/000000
000146/000000
000150/000000
000152/000000
000154/000000
000156/000000
000160/000000
000162/000000
000164/000000
000166/000000
000170/000000
000172/000000
000174/000000
000176/000000
000200/000000
000202/000000
000204/000000
000206/000000
000210/012703
000212/175000
000214/010023
000216/012723
000220/000000
000222/011322
000224/077102
000226/000207
000230/000000
000232/000000
000234/000000
000236/000000
000240/000000
000242/000000
000244/000000
000246/000000
000250/000000
000252/000000
000254/000000
000256/000000
000260/000000
000262/000000
000264/000000
000266/000000
000270/000000
000272/000000
000274/000000
000276/000000
000300/000000
000302/000000
000304/000000
000306/000000
000310/000000
000312/000000
000314/000000
000316/000000
000320/000000
000322/000000
000324/000000
000326/000000
000330/000000
000332/000000
000334/000000
000336/000000
000340/000000
000342/000000
000344/000000
000346/000000
000350/000000
000352/000000
000354/000000
000356/000000
000360/000000
000362/000000
000364/000000
000366/000000
000370/000000
000372/000000
000374/000000
000376/000000
000400/000000
000402/000000
000404/000000
000406/000000
000410/000000
000412/000000
000414/000000
000416/000000
000420/000000
000422/000000
000424/000000
000426/000000
000430/000000
000432/000000
000434/000000
000436/000000
000440/000000
000442/000000
000444/000000
000446/000000
000450/000000
000452/000000
000454/000000
000456/000000
000460/000000
000462/000000
000464/000000
000466/000000
000470/000000
000472/000000
000474/000000
000476/000000
000500/000000
000502/000000
000504/000000
000506/000000
000510/000000
000512/000000
000514/000000
000516/000000
000520/000000
000522/000000
000524/000000
000526/000000
000530/000000
000532/000000
000534/000000
000536/000000
000540/000000
000542/000000
000544/000000
000546/000000
000550/000000
000552/000000
000554/000000
000556/000000
000560/000000
000562/000000
000564/000000
000566/000000
000570/000000
000572/000000
000574/012706
000576/010000
000600/012700
000602/000002
000604/012701
000606/002000
000610/012702
000612/001000
000614/004767
000616/177370
000620/012737
000622/000210
000624/004730
000626/012737
000630/015410
000632/004716
000634/005037
000636/004722
000640/000137
000642/001000
000644/000000
000646/000000
000650/000000
000652/000000
000654/000000
000656/000000
000660/000000
000662/000000
000664/000000
000666/000000
000670/000000
000672/000000
000674/000000
000676/000000
000700/000000
000702/000000
000704/000000
000706/000000
000710/000000
000712/000000
000714/000000
000716/000000
000720/000000
000722/000000
000724/000000
000726/000000
000730/000000
000732/000000
000734/000000
000736/000000
000740/000000
000742/000000
000744/000000
000746/000000
000750/000000
000752/000000
000754/000000
000756/000000
000760/000000
000762/000000
000764/000000
000766/000000
000770/000000
000772/000000
000774/000000
000776/000000
001000/000000 - Здесь очевидно кончаются прочитанные данные
001002/177777
001004/177777
001006/177777
001010/177777
001012/177777
001014/177777
001016/177777
001020/000000
001022/000000
001024/000000
001026/000000
001030/000000
001032/000000
001034/000000
001036/000000
001040/177777
001042/177777
001044/151450
001046/177777
001050/177777
001052/177777
001054/177777
001056/177677
001060/000000
001062/000000
001064/000000
001066/004000
001070/000000
001072/000000
001074/000000
001076/000000
001100/177777
001102/177775
001104/177777
001106/177777
001110/177777
001112/177777
001114/177777
001116/177777
001120/000000
001122/000000
001124/000000
001126/000000
001130/000000
001132/000000
001134/000000
001136/000000
001140/177777
001142/177777
001144/177777
001146/177777
001150/177777
001152/177777
001154/177777
001156/177777
001160/000000
001162/000000
001164/000000
001166/000000
001170/000000
001172/000000
001174/000000
001176/000010
001200/000000
001202/000000
001204/000000
001206/010000
001210/000000
001212/000000
001214/000000
001216/000000
001220/000000
001222/177776
001224/177777
001226/177777
001230/177777
001232/177767
001234/177777
001236/177777
001240/000000
001242/000000
001244/000000
001246/000000
001250/000000
001252/000000
001254/000000
001256/000000
001260/177777
001262/177777
001264/177777
001266/167777
001270/177777
001272/177777
001274/177777
001276/177777
001300/000000
001302/000000
@100000/000000 - Смотрим состояние памяти для команд
100002/004000 - Получается он прочитал блок размером не 2048 байт (1000 слов) а целых 8192 байт ???
100004/000102
@0G 000224 - После запуска, машина повесилась, 224 адрес останова после переключения тумблера программа
Выключение машины
@100000/000010 005037 - Вводится программа загрузочного ПЗУ в память с адреса 100.000
100002/173377 177560
100004/000010 012706
100006/173377 007776
100010/000010 004067
100012/173377 000652
100014/000010 005015
...
100766/000000 177566
100770/173377 012600
100772/000000 105700
100774/173377 000207
100776/000000 000000
@
@100000G - Запускаем введенную программу
B-zagruzka
R-perezapusk
T-testy
?B
- Долго читает ленту, т.е. прочел загрузочный блок, затем что-то еще читает...
o{ zagruzki 100456
@
@
@100456/000776
100460/010700
100462/062700
100464/000174
100466/012037
100470/173776
100472/012001
100474/012002
100476/013722
100500/173776
100502/077103
@
---------- Post added at 01:36 ---------- Previous post was at 00:05 ----------
Что интересно команды моего контроллера соответствуют командам стандартного контроллера... Как можно переделать стандартный драйвер?
Вот команды стандартного контроллера:
MTS = 172520
ILC = 100000 ; Illegal command
EOF = 40000 ; End of file EOF
CRE = 20000 ; Error CRC
PAE = 10000 ; Error paritet
BGL = 4000 ; Delay channel
EOT = 2000 ; End of type EOT
RLE = 1000 ; Real zona large
BTEOPI = 400 ; Bad type
NXM = 200 ; No memory adress
SELR = 100 ; Unit select
BOT = 40 ; Begin type
CH7 = 20 ; Type 7 trek
SDWN = 10 ; Type stop down
WRL = 4 ; Write disable
RWS = 2 ;
TUR = 1 ; Type unit ready
MTC = MTS+2
ERR = 100000 ; Error unit
D9$800 = 60000 ; Type 9 trek & density 800
PWRCLR = 10000 ; Unit clear (initialize)
CURDY = 200 ; Curent unit ready
FOFF = 0 ; Not command
FREAD = 2 ; Command READ
FWRITE = 4 ; Command WRITE
FWRTTM = 6 ; Command WRITE Type Marker(TM)
FSPFOR = 10 ; Command Blok forward
FSPBAK = 12 ; Command Blok bacspace
FWRTEXT = 14 ; Command WRITE extended blok
FREWIND = 16 ; Command rewind
GO = 1 ; Command GO
Итак все что известно на похожий как у меня контроллер:
(мой слушается этих команд)
контроллер имеет 5 регистров
основной имеет програмный доступ со стороны процессора адрес устанавливается перемычками в пределах 170000-170006
запуск контроллера , используя команды монитора Элект 60 происходит так
170002\000200 A (CR) (предполагается МТ=170002)
регистр МТС загружается до запуска контролера
пример подготовка буфера управления и состояния
1002\000000 177000(LF) (-1000-0BRC)
1004\000000 2000 (LF) (2000-CMA)
1006\000000 4 (CR) (WRITE- MTC)
предполагается что адрес уст-ва 170002
запуск контроллера
170002\000200 1002 (CR)
если все правильно, регистры буфера управления и состояния будут иметь значения
1000\ 000100 (LF) (MTS)
1002\ 000000 (LF) (BRC)
1004\ 003000 (LF) (CMA)
1006\ 000004 (CR) (MTC)
NOP -нет опереации - нулевой цикл контролера
READ - чтение
WRT - запись
WFM -запись файл-маркера
SFW - пропуск вперед
SRV - пропуск назад
WEXG - запись с расширенным промежутком
RWD - перемотка
000 NOP
002READ
004 WRT
006 WFM
010 SFW
012 SRV
014 WEXG
016 RWD
управление прерыванием
100 - прерывание разрешено
выбор накопителя
0000 0 нулевое
0400 1 первое
1000 2
1400 3
адрес 170002\170000-170006
очистка 170002\010001
старт 170002\ а
вектор 224
а-2
а:
а+2
а+4
Вроде-бы стандартный драйвер MT.SYS работает этими-же командами,
только РК=172522, РС=172520. А у меня есть только один РК+РС - 170002
Похоже, сам электронный диск тоже дохлый - при записи в него этого образа с ленты (да и просто любых слов для эксперимента) обратно читается поочерёдно нормальное слово и случайное значение...
- Надо вечером сегодня попробовать поэксперементировать с диском,
и попробовать считать ленту в файл на дискету...
---------- Post added at 16:20 ---------- Previous post was at 16:15 ----------
Может проблемы с Эл. диском связаны с дырками в корзине?
------------------- CPU
------------------- НМЛ
------------------- пусто
------------------- пусто
------------------- Эл.диск №1
------------------- пусто (Должен быть Эл. Диск №2)
------------------- пусто (Должен быть Эл. Диск №3)
------------------- пусто (Должен быть Эл. Диск №4)
При установке Эл. дисков №2-4 нмл не работает
При этом Эл. диск № 1 имеет адреса 175000-175006
А Эл. диски №2-4 все вместе имеют адреса 176470-176476
Весьма смешно.
Я думал ты уже запомнил, что дырка в корзине означает оторванные DMA и прерывания :)
---------- Post added at 16:25 ---------- Previous post was at 16:23 ----------
Попробуй диск придвинуть к КНМЛ, а те с которыми не работает пока не трогать. И посмотреть какие там адреса у регистров получаются.
---------- Post added at 16:30 ---------- Previous post was at 16:25 ----------
>При этом Эл. диск № 1 имеет адреса 175000-175006
>А Эл. диски №2-4 все вместе имеют адреса 176470-176476
Видимо это просто рассматривается как дополнительная память, а не отдельные диски. Во всяком случае из кода загрузчика мы видим, что он в принципе грузится только с диска 0 и только через регистры 175000-175006. Вечером попробуем прочитать образ и посмотрим на драйвер если удастся :)
Если диск №1 дохлый, то есть запас еще три диска,
только адреса переделать... :)
---------- Post added at 16:34 ---------- Previous post was at 16:34 ----------
Если диск №1 дохлый, то есть запас еще три диска,
только адреса переделать... :)
---------- Post added at 16:43 ---------- Previous post was at 16:34 ----------
Это у меня глюк постоянно с повтором сообщений или не у меня?
Второй блок с ленты
Вложение 16396
Итак, проверил платы эл. дисков,
Имеем вот плата №1 http://www.tis.kz/large/IMG_el100-r1.jpg
она имеет адреса 175000-175006 она представляет собой
один эл. диск...
Вот три платы второго эл. диска:
http://www.tis.kz/large/IMG_el100-r3.jpg
http://www.tis.kz/large/IMG_el100-r5.jpg
http://www.tis.kz/large/IMG_el100-r7.jpg
Они работают только все вместе, и имеют адреса 176470-176476
причем сканируется на предмет адресов только нижняя плата
http://www.tis.kz/large/IMG_el100-r7.jpg от которой отходит
проводок соединяющей еще две платы...
Принцип чтения и записи дисков №1 и №2 (состоящего из 3-х плат)
одинаковый, и результаты тестирования тоже одинаковые...
Принцип записи на примере Эл.диска №1:
175000/xxxxxx 0 BK
175002/xxxxxx 0 BK
175004/xxxxxx 0 - Пишем слово 0
175004/xxxxxx 2 - Пишем слово 2
175004/xxxxxx 4 - Пишем слово 4
175004/xxxxxx 6 - Пишем слово 6
175004/xxxxxx 10 - Пишем слово 10
Принцип чтения на примере Эл.диска №1:
175000/xxxxxx 0 BK
175002/xxxxxx 0 BK
175004/xxxxxx - Читаем что-то
175004/0 - Читаем наше слово 0
175004/xxxxxx - Читаем что-то
175004/2 - Читаем наше слово 2
175004/xxxxxx - Читаем что-то
175004/4 - Читаем наше слово 4
175004/xxxxxx - Читаем что-то
175004/6 - Читаем наше слово 6
175004/xxxxxx - Читаем что-то
175004/10 - Читаем наше слово 10
Точно так-же и на втором Эл.диске
Итак, прочитали ленту!!! :)
ыыыыыыы!!!!!!!! :))))))
Вложение 16397
Посмотрел MT.SYS что там лежит - тот самый - для этого е.... э... хорошего контроллера ;)
Итого - два драйвера со стандартным названием и другим содержимым внутри :)
---------- Post added at 23:11 ---------- Previous post was at 23:00 ----------
Кстати образ не весь - там второй файл видимо есть еще.
Поздравляю!
Поздравляю тоже!
Спасибо! Спасибо всем кто мне помогал! Почти все основное сделано,
осталось только со всем разобраться и протестировать...
---------- Post added at 23:27 ---------- Previous post was at 23:27 ----------
Спасибо! Спасибо всем кто мне помогал! Почти все основное сделано,
осталось только со всем разобраться и протестировать...
---------- Post added at 23:38 ---------- Previous post was at 23:27 ----------
Итак у меня есть рабочий контроллер НМЛ + 2 СМ5300.01
все с драйвером и работатет... :)))))) :) :v2_yahoo: :v2_yahoo:
Есть мысль, что на этой же ленте могут быть драйверы для двух других контроллеров и прочий интересный софт. Удачи в раскопках!
Аха, спасибо, там должен быть и драйвер Эл. диска... :))))
Ну я картинку прикрепил с каталогом образа. Как минимум на нем нестандартный MT (уже проверили - этот самый) и DM (который не RK06/07 как должен бы быть, а этот самый электронный диск :)
---------- Post added at 23:59 ---------- Previous post was at 23:50 ----------
Загрузил систему которая лежит на этом образе.
RT-11 V5.0 однако :)
Код:.SH DEV
Device Status CSR Vector(s)
------ ------ --- ---------
MT Installed 000070 224
TT Installed 000000 000
LP Not installed 177514 200
DM Not installed 175000 114
SL Installed 000000 000
DP Installed 176470 114
MY Resident 172140 170
Вторая часть.. Вложение 16400
Сколько нервов и сил было потрачено и для чего...
Поздравляю!!!
Результат все оправдывает!!! Я знаю только одного человека у кого
есть рабочий НМЛ... :)
---------- Post added at 01:45 ---------- Previous post was at 01:44 ----------
Результат все оправдывает!!! Я знаю только одного человека у кого
есть рабочий НМЛ... :)
Итак, первый файл на ленте, после первого маркера,
после сбойного загрузочного блока,
длина 536 НМЛ блоков
Вложение 16401
и после него еще блок 200 с чем-то блоков НМЛ
Вложение 16407
Вобщем с помощью DIR/BL/OC, DUMP, чашки чая и какой-то матери склеил обрезки :)
Размер файла увеличен до рамера электронного диска (взятого из драйвера в этом же образе), пустое место в конце потерто нулями.
Пока есть время посмотрел на драйвер электронного диска. Написан криво конечно, но к счастью он маленький :)
Драйвер обозвали DM, хотя такой драйвер есть стандартный (RK06/RK07), но автор видимо просто не знал этого.
В .DRBEG использован ID, занятый DECовским драйвером (причем не DM).
Зачем-то вместо двух CLR обнуляется отдельный регистр и потом используется как ноль в команде. В загрузчике и вовсе откровенно "MOV #0,..." используется. Да и фиг с ним...
При входе в драйвер проверяется номер блока, однако сравнение делается знаковое и потому проверка в принципе неправильна. Хрен с ним - все-равно эта проверка бесполезна так как ее уже сделал монитор до этого.
При всем при том проверка на номер устройства не делается. Что DM0, что DM7 - ему пофигу.
Размер диска жестко задан 1792. блока, CSR жестко задан 175000, вектор жестко задан 114, но не используется в принципе (вернее используется как признак ошибки). Никаких DMA, все ручным трудом...
Принцип работы такой:
- в CSR заносится номер блока
- CSR+2 обнуляется (адрес внутри блока)
- из/в CSR+4 читаются/пишутся слова данных [при записи конец блока надо занулять вручную]
Загрузочная дискета формата MY, соответствующая выше выложенному
образу, только стандартного размера дискеты 819.200
и так-же присутствует драйвер MY.SYS
Вложение 16412