![]() |
Quote:
Quote:
Quote:
|
Quote:
|
Quote:
Например, на БК-0011М @ 4 МГц : Code:
CMP @Tab(R1), @#Addr 6 x DATI 80 CLC---------- Post added at 16:40 ---------- Previous post was at 16:22 ---------- Quote:
Quote:
Если удастся сделать рабочий комплект RT-11 + HX для порта без прерываний - он будет грузиться и через пультовой порт Pro350 / Э-85. Quote:
Quote:
Для начала, наверное, хорошо бы получить осциллограммы выполнения всех вариантов команды CMP с кодом команды и всеми аргументами в ОЗУ: Code:
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0) |
Новая загадка мистического процессора 1801ВМ1 ждёт своего решения:
Выяснилось, что при задержке RPLY = 6*CLK - время выполнения NOP равно времени выполнения MOV R0,R0 , но при задержке RPLY < 1*CLK - MOV R0,R0 выполняется за 8 тактов, а NOP - за 9 тактов. Постановка задачи: Сделать настраиваемую задержку RPLY и определить, при какой минимальной задержке RPLY ( в тактах CLK ) время выполнения команд MOV R0,R0 и NOP становится одинаковым. |
У меня RPLY на диаграммах какой-то странноватый - снимался прямо с ножки 39 процессора. На схеме БК-0010 нарисован триггер 155ТМ2, который синхронизирует этот сигнал со спадом CLC (ножка 1 процессора). На диаграммах такого не наблюдается - то ли неисправность, то ли схема на заводе и в этой части подшаманена - буду разбираться. Доделаю в PCAD плату эмулятора в разъем МПИ и продолжу с тестами.
А вопрос такой - выходы у ВМ1 - все типа "открытый коллектор" - как ГОСТ 26765.51-86 (Интерфейс Магистральный Параллельный МПИ) требует? Есть желание ВМ1/2/3 к 3-вольтовой FPGA прицепить, если там "открытый коллектор", то можно попытаться вообще напрямую, без преобразования уровней - резисторы на +3.3V кинуть вместо +5V и все. С сигналом WTBT я самостоятельно разобрался - у него двойное назначение. |
Отрохов ( разработчик ВМ1 ) писал, что у них вышел какой-то глюк с обработкой RPLY, из-за чего на этот вход процессора приходится ставить триггер. Но чем плохо без триггера и как именно триггер должен изменять тайминги приёма RPLY - я так и не понял.
|
Quote:
Quote:
|
Quote:
---------- Post added at 13:38 ---------- Previous post was at 13:23 ---------- Хотя, не исключено, что достаточно и задержки до ближайшего фронта CLK, но задержку в половину такта оказалось проще реализовать. |
Quote:
|
Разобрался насчет REPLY. У меня БК-0010 "переразведенка", с подшаманенной на заводе схемой. RPLY поступающий с разъема МПИ и с вывода 34 ВП1-037, объединяются на ЛА3 D7.4 и инвертируются на ЛН1 D5.4 как на штатной схеме. А дальше на моем экземпляре установлен ИР1, который попутно формирует видеовывод, и тактируется от 12МГц, и вот на одном из его свободных от видеовывода разрядов сделали задержку RPLY на четверть такта процессорной частоты (то есть на 80нс примерно).
Далее еще интересный момент - самый первый RPLY на моих диаграммах - при чтении SEL1 - он формируется отнюдь не ВП1-037, а самостоятельно внутри процессора. Поэтому у него такая времянка. Любопытно, в многопроцессорной системе, куда перезжают эти регистры 177714 и 177716 - не могут же они в этом случае не зависеть от номера процессора. |
Регистры зависят - их адреса определяются состоянием ножек 26 и 27:
Code:
Адреса внешних регистров: |
Я так понимаю что от номера процессора в системе (выводы 26, 27) зависит базовый адрес всего блока регистров 177700..177716, не только 177714 и 177716.
177700..177712 - внутренние, а 177714 и 177716 - внешние, по отношению к ВМ1. А кто в БК-0010 формирует адрес начального старта? В БК-0011 на AD15 и AD14 есть явно активируемые при чтениии SEL1 выходы 155ЛН2 - в итоге дает 140000. Но в БК-0010 такой схемы нет, получается сам ВМ1 формирует старший разряд (0 в инвертированном AD15)? |
Очень любопытно!
Значит ли это, что если SEL1 & 0xFF00 читается как 000000 - старт будет с адреса 0100000, а если как 020000 - старт будет с адреса 0120000 .. ... |
Quote:
|
Quote:
Нормальный такой ВМ1 - на 177700-177712 формируется снаружи и RPLY и данные, хотя чтение идет "самим собой" внутренних регистров. Но это вполне допустимо. А вот для 177714-177716 - формирует сам для себя только RPLY - данные внешняя система должна уж как-нибудь сама предоставить. Что в-общем то нарушает протокол обмена МПИ - RPLY должен снаружи формировать модуль, предоставляющий данные, а не схема внутри процессора. |
Quote:
|
Народ, подскажите пожалуйста.
Разбираюсь с 1801ВМ1. Если на шине AD (15...0) такие уровни 0000 0000 0011 0001, то это число 61 или 177716 ? Другими словами - +5 вольт на линии - это ноль или единица? |
На МПИ БК принято за лог. 1 уровень 0в, за лог. 0 +5в.
Приведенный двоичный адрес соответствует 177716 - если осциллографом мерить. Если ВМ1 выдает этот адрес, он должен ( в БК ) одновременно выдавать уровень 0в. на линии чтения системного порта 177716 - см. Э3 БК. ( Т.е. при начальном пуске требовать адрес старта с 177716 - старший байт ). |
Спасибо большое!
177716 - это я к примеру привёл. Потому, что (как я понял) проц стартует и обращается к этому адресу за старшим байтом адреса перехода. Разбираюсь в одном приёмнике, управление которого собрано как раз на К1801ВМ1. Прочитал ПЗУ-шку, теперь ищу дизассемблер. |
IDA
|
Ок.
Уже установил IDA 6.1 и поставил надстройку от Patron вот отсюда: http://zx.pk.ru/showthread.php?postid=367209 правда она для версии 5.2, но вроде как работает. Некоторые команды не распознаются, например .Word 7002 или .Word 7601 но возможно я уже залез в блок констант. Межблочная шина МПИ. Думаю зацепиться на неё и посмотреть что куда пересылается. |
Разрешите сообщить начинающему ( программисту ), что самой лучшей ковырялкой из всех, что за 28 лет я видел - это DESS V5.00 от ОС ДВК ( она же RT11 V5.01 )
дизассемблер там написан чуть ниже таблицы чисел - а транслировать можно командой "T" ( пословно ). Листинг трансляции можно вывести на принтер - но поблочно ( что несколько смущает начинающих хакеров ). Гугля в помощь. Однако тот DESS, что поставляется в комплекте с эмулем ДВК - непрофессионально дополнен Хексами, которые в принципе не нужны на DEC-системах, и по этому там испорчен набор команд в ассемблере, в отличии от DESS V5.00. * Вообще у Dessa есть несколько недостатков: 1.Нельзя назначить виртуальный адрес исследуемого массива - только физический ( особенно неудобно расковыривать дурные ПЗУ, код которых неперемещаем ( 95%)) 2.Нет команды заполнить массив числами - для писателей пригодилось бы. 3.Нет команды перемещения блоков байтов - приходится ручками перелопачивать кучи цифр. 4.Потерял вариант, где вывод ассемблера был не на принтер/девайс, а в файл . 5.Других недостатков за 25 лет работы и написания кучи ПЗУ не выявил. |
MM, спасибо.
Я действительно начинающий ковырятель в чужом коде. Раньше, бывало, писал на AVR-ассемблере :) IDA нашёл первее и пока в ней поцарапаюсь. А чтобы завести DESS, видимо нужно сначала поставить эмуль, из под него запустить RT-11, а потом уже DESS... как-то так? Кстати, немного непривычно идут адреса - через один (только чётные). Видимо предполагалось, что память будет 8-разрядная? Блин, ничего не пойму с этим дизассемблером... вот такой код из ПЗУ-шек (их там две - старший и младший байты): 0100: 15 0101: С6 0102: 90 0103: С0 то есть 000400: 012706 000402: 110300 По моему разумению, это будет MOV(B) #110300, R6 т.е. содержимое ячейки 110300 скопировать в регистр R6. Дизассемблер же пишет BiCB @(R0)+,(R5)+ Или лыжи не едут, или ... одно из двух. |
Quote:
143025 BICB @(R0)+,(R5)+ 140220 BICB R2,@(R0)+ Если байты переставить, то будет: 012706 110300 MOV #110300,SP загрузить число 0110300 в регистр SP (R6). |
Так. Стоп.
Старший байт ведь идёт первым? или нет? "старший байт по нечётному адресу" - буду осмысливать :) DESS нашёл, идёт стандартом к DVK Emulator: http://zx.pk.ru/showthread.php?t=18351 Методом тыка нашёл управляющие клавиши: D - на слово назад T - на слово вперёд A - переход по указанному адресу B - выбор блока R - вид кода (Word-Hex-Byte-Rad), но нужно отключить CapsLock I - дополнительная строчка с переводом текущей позиции в другую систему счисления F - загрузка нового файла Единственно, пока не понял, как внешние файлы туда подключить... |
В DEC-системах принято, что младший ( четный ) байт в слове, старший - нечетный.
Например: 000000 - младший четный, 000001 - старший нечетный. При этом слово ( 2 байта ) имеет адрес - 000000. * Подключение внешних дисков xxxxxx.dsk ( полных снимков дискет RT-11 ) происходит в управляющем файле конфигурации в "блокноте". Для научных целей можно любые другие файлы подключать, переименовав их в ".dsk" - но не более 32 мегабайта - на данный момент это магическая величина для DEC-16 бит систем на основе RT-11. * В DESS есть замечательная команда "Output" - по умолчанию на LP: , но можно назнадить любое другое устройство, как LP: командой .ASS xxx LP: - из командной строки RT-11. Туда будут передаваться символы дизассемблера от команды "Т". При выводе на устройство запись в него ведется с 000000 блока, с 000000 адреса - т.е. если на нем был каталог, то он вытирается. Очень удобно организовать при помощи драйвера LD: виртуальные диски и на них выводить дизассемблер из DESS. Например, командой CREATE создать файл размером блоков так 10, и переименовать его в XY.DSK , затем связать его с диском LD0: командой MOUNT . |
Спасибо.
Допустим у меня есть дамп ПЗУ в файле dump.bin. Я его переименовываю dump.dsk ? Как увидеть его из DESS? По умолчанию у меня HD0 = HDSYS.DSK. Указываю HD1 = dump.dsk. набираю команду mount спрашивает Device? пишу LD1 спашивает File? пишу dump и он мне в ответ - LD-F-File nod found DK:dump.DSK То есть, нужна какая-то файловая система в прицепляемом файле... |
К сожалению, просто так описанный фокус не проходит.
Не помню точно, но наличие ФС на монтируемых дисках - необязательное условие. Что бы RT-11 не ругалась, не забывайте указывать, где ( т.е. "путь" ) расположен файл для драйвера LD. Например : SY:XY.DSK Для добавления отдельных файлов в диск типа .dsk под RT-11 есть плагин для тотал командира - хрен знает, как его ставить - как-то промучился полдня, но поставил - видимо, там какой-то баг в самом командире с установкой. * В Вашем случае можно совсем не монтировать, а при запуске DESS просто указать, например, DW1: - DESS не нуждается в ФС на девайсе и воспринимает его просто как файл. Если чесно, настоятельно не рекомендую патчить DESSом файлы размером свыше 64 блока - возможны самые дурные варианты, например запись исправления не в, допустим, 128-й блок файла, а в 1-й - проверено годами, но этот баг вылезает не всегда. |
Quote:
Можно сделать это при помощи плагина для TotalCommander, описанного ЗДЕСЬ. |
Ого! Заработало!
Установил плагин: Меню Конфигурация -> Настройка -> Плагины Архиваторные плагины .wcx "Настройка" Файлы с расширением "wcx" Обзор -> RT-11dsk.wcx И теперь тотал коммандер открывает файлы *.dsk при помощи <Ctrl>+<PgDown>. Вовнутрь HDSYS.DSK удалось скопировать dump.bin только после переименования его в dump1.SAV, т.к. файл DUMP.SAV там уже есть, а расширение .BIN не принимается. после выполнения команды DIR напротив имени файла выводится его объём в блоках (по 512 байт)? У меня получилось 32 блока. Исходный файл занимает 16 кб. Теперь DESS читает мой файл! Ура! Но байты всё же придётся переставить... Байты переставил. Копаюсь в файле. А может ли DESS вывести результат дизассемблирования в виде текстового файла? |
Quote:
Quote:
Code:
.DESS STARTS |
darkstar, http://archive.pdp-11.org.ru/BIBLIOTEKA/DVKTXT/DESS.HLP
http://archive.pdp-11.org.ru/BIBLIOT...TXT/DECOD2.TXT - альтернатива дизассемблер form'a - http://archive.pdp-11.org.ru/ukdwk_a...orm_disasm203/ кросс-отладчик "МАРИЯ", автор Gina - http://archive.pdp-11.org.ru/ukdwk_a...plekt/MARIAH1/ Дополнительные материалы >>> http://archive.pdp-11.org.ru/BIBLIOTEKA/dwkbooks/ http://archive.pdp-11.org.ru/BIBLIOT...sembler_pdp11/ http://archive.pdp-11.org.ru/BIBLIOT...r_pdp11_vax11/ http://archive.pdp-11.org.ru/ukdwk_a...ekt/ASMDOC.dsk Я использую версию DESS.SAV - размером 19 блоков которая (она меня полностью устраивает и не глючит на УК-НЦ (живой и эмуляторе). --------------------------------------- в случае непредвиденных осложнений правьте ссылки на зеркало архива !!! |
5 Attachment(s)
hobot, спасибо.
Книжку с ассемблером перегнал в DJVU. Буду разбираться, что же означает: TRAP 044 TRAP 012 TRAP 033 Вроде как это команда на прерывание, но куда они ведут - непонятно... в таблице векторов прерываний по этим адресам - пусто... |
Quote:
|
Так.
А зачем тогда их такое множество, этих TRAP-ов? Чем они отличаются друг от друга? Под них аж вон сколько команд выделили: от 104400 до 104777. Зачем? Видимо, при переходе по этому прерыванию, ещё какие-то параметры передаются... Вроде как ни одного EMT в тексте программы не встретил. Да и по адресу 000 030 - пусто. Зато на адресе 000 034 есть указатель на 004 504. Я так понимаю, что число 000 200 сразу за адресом перехода в таблице векторов - это слово состояния процессора на период обработки прерывания. Оно устанавливает бит Р=1 и запрещает все маскируемые прерывания. |
Quote:
|
EMulator Trap (EMT) - можно самому создавать свои, для удобства в своих программах, как и Trap.
|
Ничего не понял...
В книжке 3 от ДВК сказано: - стр.31 "В командах EMT и TRAP старший байт слова содержит код команды, а младший байт предназначен для передачи информации драйверам внутренних прерываний". Что это за информация? И каково её практическое использование? |
Quote:
Обычно младший байт команды EMT/TRAP используется как номер вызываемой подпрограммы, а извлекается он из кода при помощи сохранённого в стеке адреса возврата: Code:
.SBTTL ;....................... TRAP-ДИСПЕТЧЕР ........................; |
Quote:
|
| All times are GMT +4. The time now is 02:31. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.