При обоих положениях SA1.1 старт с заземлённой ногой 47 даёт одинаковый результат ?
При обоих положениях SA1.1 старт с заземлённой ногой 47 даёт одинаковый результат ?
Да.
PC это R7.
Весьма похоже, что при активном сигнале HALT загрузка констант в PC и PSW не производится ( поэтому в стек попадает неизменное для экземпляра случайное начальное значение PC ).
Если сигнал HALT не активен - в PSW грузится 340, при W0=0 в PC грузится 000776, а при W0=1 в PC грузится 173000.
- - - Добавлено - - -
А если убрать заземление ноги 47 - какие значения R7 и RS попадут в стек при старте с W0=1 ?
Вот.
Код:****** ДОСТУПНОЕ ОЗУ - 256 K *
@ 001000
@R7/001000
@RS/000344
Да.
Очень интересно. Такое впечатление, что если при входе в программу пульта прошивка 134 выполняет проверку объёма памяти - сохранённые значения PC и PSW заменяются на 001000 и 000344. Если активен сигнал HALT - проверка объёма памяти не производится и тогда сохранённое при входе случайное начальное значение PC не заменяется. Или программа проверки объёма памяти при активном сигнале HALT просто так вылетает, что в стек всегда попадают R7/007732 и RS/000000.
Да надо найти описание всех переключателей МС1201.03 тогда будет проще. Ещё могу вставить плату загрузчика (от ЧПУ) с адресом 173000 и посмотреть регистры. Правда она 16бит, не знаю пойдет она или нет.
Подойдёт. Можно будет проверить старт с адреса 173000 при W0=1. Но только если этот загрузчик может как-то дать понять, что его вызывали ( на экран, например, что-то вывести ). Ведь прошивка 134, как мы уже поняли - при первом входе заменяет сохранённые значения PC и PSW на свои.
Для начала посмотрим загрузчик, чтобы знать что будет в регистрах.
Скрытый текст
***** ДОСТУПНОЕ ОЗУ - 256 K *
@ 001000
@173000/012706
00173002/017776
00173004/012702
00173006/000200
00173010/106402
00173012/005005
00173014/012725
00173016/000002
00173020/005025
00173022/012725
00173024/000006
00173026/005025
00173030/012725
00173032/000012
00173034/005025
00173036/012701
00173040/173000
00173042/005002
00173044/012703
00173046/000377
00173050/062102
00173052/005502
00173054/077303
00173056/021102
00173060/001401
00173062/000000
00173064/012701
00173066/007772
00173070/005025
00173072/001401
00173074/000000
00173076/077104
00173100/005037
00173102/017000
00173104/012700
00173106/177000
00173110/005060
00173112/000020
00173114/012760
00173116/177777
00173120/000020
00173122/016001
00173124/000020
00173126/010102
00173130/042702
00173132/177760
00173134/001403
00173136/052737
00173140/000400
00173142/017000
00173144/010102
00173146/042702
00173150/177417
00173152/001403
00173154/052737
00173156/001000
00173160/017000
00173162/010102
00173164/042702
00173166/170377
00173170/001403
00173172/052737
00173174/002000
00173176/017000
00173200/032737
00173202/003400
00173204/017000
00173206/001001
00173210/000000
00173212/012701
00173214/000010
00173216/005020
00173220/077102
00173222/012737
00173224/173600
00173226/000004
00173230/012700
00173232/177760
00173234/012701
00173236/000010
00173240/005020
00173242/077102
00173244/012737
00173246/000006
00173250/000004
00173252/012737
00173254/000140
00173256/177400
00173260/105737
00173262/177560
00173264/100006
00173266/022737
00173270/000334
00173272/177562
00173274/001002
00173276/000137
00173300/120002
00173302/032737
00173304/000001
00173306/177560
00173310/001363
00173312/000240
00173314/000240
00173316/012737
00173320/000017
00173322/177402
00173324/000411
00173326/000000
00173330/000000
00173332/012706
00173334/017776
00173336/005016
00173340/010705
00173342/062705
00173344/000116
00173346/000407
00173350/022737
00173352/107417
00173354/020000
00173356/001002
00173360/000137
00173362/020002
00173364/000000
00173366/005000
00173370/004715
00173372/105303
00173374/001374
00173376/004715
00173400/004767
00173402/000104
00173404/010402
00173406/024242
00173410/022702
00173412/000002
00173414/001443
00173416/004767
00173420/000066
00173422/061604
00173424/010401
00173426/004715
00173430/002011
00173432/105700
00173434/001754
00173436/105737
00173440/177564
00173442/100375
00173444/112737
00173446/000077
00173450/177566
00173452/000726
00173454/110321
00173456/000763
00173460/012703
00173462/177550
00173464/105213
00173466/105713
00173470/100376
00173472/116303
00173474/000002
00173476/060300
00173500/042703
00173502/177400
00173504/005302
00173506/000207
00173510/004715
00173512/010304
00173514/004715
00173516/000303
00173520/050304
00173522/000207
00173524/004767
00173526/177760
00173530/004715
00173532/105700
00173534/001340
00173536/006204
00173540/103673
00173542/006304
00173544/061604
00173546/000114
00173550/052737
00173552/000140
00173554/177400
00173556/012700
00173560/120000
00173562/012701
00173564/020000
00173566/005020
00173570/077102
00173572/000137
00173574/173330
00173576/000240
00173600/012716
00173602/173244
00173604/000002
00173606/000000
00173610/010346
00173612/005003
00173614/005703
00173616/001373
00173620/012703
00173622/000001
00173624/005000
00173626/004767
00173630/000122
00173632/077303
00173634/005005
00173636/005200
00173640/004767
00173642/000106
00173644/062700
00173646/000005
00173650/020102
00173652/101030
00173654/010204
00173656/160104
00173660/020427
00173662/000047
00173664/101402
00173666/012704
00173670/000047
00173672/060400
00173674/005200
00173676/004767
00173700/000050
00173702/010100
00173704/004767
00173706/000042
00173710/112100
00173712/004767
00173714/000036
00173716/005304
00173720/100373
00173722/005405
00173724/110500
00173726/004767
00173730/000022
00173732/000730
00173734/004767
00173736/000012
00173740/012600
00173742/004767
00173744/000004
00173746/005203
00173750/000764
00173752/004717
00173754/105737
00173756/177554
00173760/100375
00173762/110037
00173764/177556
00173766/060005
00173770/000300
00173772/000207
00173774/000240
00173776/054233[свернуть]
Автозагрузки не произошло. Patron, Вы уверены что автозагрузка зависит только от SA1.1?
Смотрим регистры.
Код:***** ДОСТУПНОЕ ОЗУ - 256 K *
@ 001000
@R7/001000
@RS/000344
@173000G
@ 000000
@R7/000000
@RS/000010
Когда нога 59 заземлена - процессор 1801ВМ3 начинает выполнение программы с адреса 173000. Если разместить по адресу 173000 код, который что-то куда-то пишет, то по наличию/отсутствию результатов такой записи можно будет сделать вывод, выполнился ли этот код при старте процессора.
- - - Добавлено - - -
Когда прошивка 134 выводит надпись про "ДОСТУПНОЕ ОЗУ" - сохранённые значения регистров ( похоже ) изменяются, поэтому по содержимому регистров вывод сделать нельзя.
Посмотрел текст по адресу 173000 платы от ЧПУ - он острозаточен под железо ЧПУ :
http://storage8.static.itmages.ru/i/...015157f018.jpg
Более того :
http://storage9.static.itmages.ru/i/...d5f31ac29f.jpg
Т.е. максимум, что может этот текст - выпасть в пульт не со 173000, а с др. точки, которые имеются по тексту загрузчика. Кроме того, он предусматривает какие-то ПЗУ по адресам типа 120000 - см. текст выше.
Коллеги, вам не кажется, что вы занимаетесь немножко не тем? Если на системном терминале что-то появилось, то уже выполнена не одна сотня команд из 134-й (или 377-й) ПЗУхи, и что там было вначале, никто точно не скажет. Тут надо цеплять логический анализатор, или запоминающий многоканальный осциллоскоп и разглядывать первые несколько десятков тактов после установки К ПОСТН В или К ПИТН В (BDCOK H, BPOK H). Точнее, сначала после К ПОСТН В, затем, если внятных результатов не будет, после К ПИТН В.
- - - Добавлено - - -
В крайнем случае годится даже простой осциллоскоп на ЭЛТ, но тогда надо воспользоваться приемом, изложенном на 65 стр. книжки Захарова, а именно - подать на К ПОСТН В серию с постороннего генератора (частоту подобрать), её же подать на внешнюю синхронизацию осциллоскопу и щупать по очереди SYNC, DA и т.д., результаты зарисовывать, а потом вникать. Помню, пару раз таки довелось вот так поразвлекаться... Конечно, анализатор гораздо лучше, но тогда у меня его не было.
Прошивка написана так, что при любом попадании в пульт первым делом сохраняет все регистры, чтобы восстановить их, если пользователь захочет продолжить выполнение программы командой P. Именно эти значения ( а отнюдь не текущие ) можно просматривать и изменять в пульте.
Но у прошивки 134 есть одна особенность - если с момента включения питания прошивка ещё ни разу не выполняла начальное тестирование памяти - при первом же входе в пульт запускается программа тестирования и сохранённые значения регистров изменяются. Поэтому, если прошивка после входа в пульт вывела сообщение про "ДОСТУПНОЕ ОЗУ", то это означает, что сохранённые значения регистров испорчены.
Так и я о том же. То есть, или логический анализатор, или специально оборудованный стенд, который будет "подсовывать" процессору заранее запланированное содержимое Halt-Mode ROM и ОЗУ всех видов, протоколируя при этом всё, что происходит.
Кстати, а какая минимальная тактовая частота у ВМ3? 100 кГц, как и у остальных? Я что-то не нашел...
Самое интересное - поместить в HALT-ROM по адресу 000000 команду TST @#40000 и посмотреть на какие физические адреса будут мапиться обращения к диапазонам PARH0 и PARH1. Дело в том, что аппаратная реализация режима пульта в ДВК использует для адресов 000000..077777 только младшие биты адреса, поэтому никто не знает, какие 22-разрядные адреса при этом на самом деле выставляются на шину.
ВМ2 без проблем работает на частоте 0 Гц ( с ручным тактированием ), можно предположить, что и ВМ3 тоже.
- - - Добавлено - - -
Если бы было так, то при старте с PC=173000 - именно это значение сохранялось бы при входе в пульт и было видно при просмотре R7/.
Что лишний раз подчеркивает бесполезность всех манипуляций с 1201.03/04. Похоже, придется делать стенд. В принципе, могу попробовать, правда не уверен, что смогу справиться быстро. Я прикидывал сделать его на каком-нибудь STM32, заказывая с Али пробную платку я учитывал, в том числе, и эту задачку, но она (платка) приползет, дай Бог, через месяц. Однако, учитывая отсутствие ограничения вниз по тактовой частоте ВМ3, туда можно сунуть что угодно, лишь бы ног хватило. Так, что буду думать...
AFZ, А тесты прогнать на МС1201.01 есть желание?
MiX, а в каком положении у вас находится переключатель SA2.2? В замкнутом состоянии он перетранслирует сигнал ACLO(ПИТ) на вход HLT(ОСТ) процессора.
Alex_K, Сейчас в замкнутом. Но положение его не влияет на старт.
.
Дополнительное изучение документации по ВМ3 позволило сделать вывод, что есть два варианта процессора 1801ВМ3.
1. У раннего варианта ВМ3 есть 4 регистра PARH, причём - PARH0 инициализируется значением 170000, а PARH1 инициализируется значением 167600. Сколько из регистров PARH доступно программно - неизвестно.
2. У позднего варианта ВМ3 есть 2 регистра PARH, из которых программно доступен только PARH2, а скрытый PARH3 имеет неизменное значение 177600. Адреса из диапазонов PARH0 ( 000000..037777 ) и PARH1 ( 040000..077777 ) выдаются на шину без трансляции. При активном сигнале SEL старшие 6 разрядов 22-разрядного адреса всегда нулевые.
- - - Добавлено - - -
Также можно предположить, что именно ранний вариант ВМ3 устанавливает стек HALT-моды на 100000, потому что прошивка 134 рассчитана как раз на это. Поздний вариант ВМ3 устанавливает стек HALT-моды на 020000.
А когда оно из пультовой программы куда-то стучится через PARH2, SEL снимается, да?
Вообще-то, 377 - прямая замена 134-й. В частности, ту 377-ю, которая стоит в ДВК у СуперМакса, я лично сунул в панельку, которую запаял на место выдранной 134-й. И ДВК весело работал, как до замены, так и после.
- - - Добавлено - - -
И, вспоминая, как я пытался дизасмить 377-ю, похоже, 017776, 037776, 057776 и 077776 в Halt-Mode мапятся в одно и то же место. Очень похоже, хотя 100% гарантии не дам.
SEL снимается, если программа пульта обращается в диапазон PARH2 ( 100000..137777 ) или в диапазон PARH3 ( 140000..177777 ).
В ДВК любая прошивка для ВМ3 будет работать с любым процессором ВМ3 - так плата сделана.
Эти адреса вообще не мапятся - просто плата ДВК в режиме SEL сначала обрезает у адреса все биты, кроме BIT_12 .. BIT_0, а если (BIT_12 | BIT_11)==014000, то выбирается микросхема HALT-ОЗУ и у адреса дополнительно отрезаются все биты, кроме BIT_8 .. BIT_0 - в результате, если на шине (например) адрес: 14000, 15000, 16000, 17000, 34000, 35000, 36000, 37000, 54000, 55000, 56000, 57000, 74000, 75000, 76000, 77000 - то обращение будет идти к одной и той же ячейке HALT-ОЗУ с нулевым адресом.
...
При очередном эксперименте с другой платой выяснилось что при переключателе SA1.1 в 1 происходит штатный запуск ЦП. Если после этого нажать кнопку УСТ то получается переход на адрес 173000. Думаю что если поставить на ногу INIT (33) конденсатор на землю, и в разрыв цепи от кнопки сопротивление (классическая схема сброса ) то старт процессора будет на это адрес.
Код:***** ДОСТУПНОЕ ОЗУ - 256 K *
@ 001000
@
@ 173000
@R7/173000
@RS/000340
Процессор всегда стартует одинаково, просто в первый раз сохранённые значения были испорчены программой тестирования ОЗУ, а после нажатия кнопки УСТ - сохранённые значения остались неизменными. Если на адрес 173000 повесить ПЗУ с любой нормальной программой, то эта программа будет запущена сразу после включения.
- - - Добавлено - - -
Кстати, если переключить SA1.1 на старт с вектора 24, то какие значения R7 и RS будут сохранены после нажатия кнопки УСТ ?
Когда я вставил плату загрузчика то пошла программа именно загрузчика ! Без всяких "звёздочек и ДОСТУПНОГО ОЗУ" и без нажатия кнопки Уст. А если на шине нет загрузчика то старт обычный. Вывод такой, что эта плата корректно работает. До сообщения 1309 была другая плата.
После нажатия кнопки переход на 000002.
получается
R7/000002
RS/000000
Это адрес останова после выполнения команды HALT по адресу 000000, который был загружен в PC из вектора 24.
Надо бы запустить IOSCAN.SAV на обеих платах.
Да! Это так!
В моём случае когда на плате загрузчика 173000 была некорректная программа, то и не давала нормальных результатов. Теперь сменив загрузчик загружается обе платы. То есть дело было не плате а в загрузчике.
- - - Добавлено - - -
Плата загрузчика стоит.
172300-172316
172340-172356
172512
172516
173000-173776
176560-176566
177514-177516
177560-177566
177572-177616
177640-177656
177776
Надо бы выяснить, как процессор ВМ3 отрабатывает прерывание зависания ( TrapTo_4 ) в режиме HALT.
Для этого можно в режиме старта по вектору 24 записать в ячейку 24 значение 26, а с адреса 0 расположить код из прошивки 134, проверяющий чтение отсутствующего адреса:
Код:MOV #177600, @#172512
TST @#100000
Для меня это актуально?
У меня сейчас на работе запара, а процессоры и платы заныканы под елкой (тумбочка за ней), надеюсь что в ближайшее время я немного разгребусь на работе, вынесу елку (да-да, для этого не обязательно майских праздников ждать :)) и смогу потестить ВМ3 с анализатором. Возможно что найдется и проц 88 года. Если можно - то нельзя ли собрать все желаемые тесты с описанием в одно сообщение или в личку/на мыло прислать, а то я ориентацию в ветке уже потерял?
О, вот это я забыл давно и прочно. Этот угол схемы 1201.03/04 я если и разглядывал, то лет, так, 20 назад, не менее, поскольку не помню совсем.
- - - Добавлено - - -
Вообще-то INIT - это выходной сигнал процессора для сброса периферии, как при включении питания, так и по машинной команде RESET в произвольный момент. А сбросом для процессора является DCLO, получаемый из К ПОСТН В (BDCOK H), который генерится в БП, а также выдается по кнопке "УСТ". Сигнал ACLO (К ПИТН В, BPOK H), во время работы (при активном К ПОСТН В) должен быть запросом на прерывание по вектору 24, а вот как оно там ведет себя при включении, когда К ПОСТН В уже появился, а К ПИТН В появится через 70 мс, ИМХО, тоже должно быть предметом выяснения, чем там занимается ЦП эти 70 мс?
Впрочем, все это безусловно верно для Э-60, а насколько точно это скопировано при разработке процессоров 1801, в общем-то, тоже предмет выяснения.
Желания прибавляются по мере успехов эмуляции. Главное на данный момент - разобраться, как ВМ3 отрабатывает зависание в HALT-моде ( признаком наличия/отсутствия HALT-моды является состояние ноги 55 ).
Также - можно при входе в HALT-моду выполнить команду: MOV SP, @#2 - чтобы узнать значение SP. Прошивка 377 якобы сохраняет несколько вариантов SP - это тоже можно проверить.
В итоге код получается такой:
Код:.ASect
. = 0
Br Next // Точка входа пульта.
. = 24
.Word Start // Адрес старта.
.Word 340
Start:
Mov #2, R1
Mov #177776, R2 // Адрес PSW
Mov #140340, (R2) // Установить USER-моду
Mov SP, (R1) // Какой стек ?
Mov #4444, SP // Стек USER-моды
Mov #340, (R2) // Установить KERNEL-моду
Mov SP, (R1) // Какой стек ?
Mov #2222, SP // Стек KERNEL-моды
HALT // Установить HALT-моду
Next:
Mov (R2), (R1) // Прочитать PSW
Mov SP, (R1) // Какой стек ?
Mov #140340, (R2) // Выбрать стек USER
Mov SP, (R1) // Какой стек ?
Mov #340, (R2) // Выбрать стек KERNEL
Mov SP, (R1) // Какой стек ?
Mov #177600, @#172512 // PARH2 -> IO Page
Tst @#100000 // Чтение 17760000 вызовет зависание
Nop