Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   БК-0010/0011 (http://zx-pk.ru/forumdisplay.php?f=59)
-   -   Тесты ВМ1 (http://zx-pk.ru/showthread.php?t=11557)

Vslav 13th April 2013 17:01

Quote:

Originally Posted by Patron (Post 592372)
Чтобы немного лучше разобраться в вопросе - можно выполнить подряд по три одинаковых команды TST (R0) и CMP (R0),R0 и если их времянки

Так R0 для смежных комманд уже не будет указывать на адрес следующей команды? Или это уже не суть важно для этого теста?

Quote:

Originally Posted by Patron (Post 592372)
БК-0010.01 @ 3MHz - очень интересный объект для тестирования, но для нормального запуска тестов и вывода результатов - её было бы полезно подключить к PC через последовательный порт.

Можно на "эмуляторе ПЗУ" реализовать и UART, но с некоторым расползанием времянки и скорее всего без прерываний. Но я сейчас буду заниматься захватом видеовывода и выводом его через USB в окошко Windows, уже прикупил макетик на CY7C680013. Возможно туда же получится прикрутить и эмуляцию клавиатуры. Потому что телевизоры у меня далеко, второй VGA монитор есть, но надо скандаблер и жалко место на столе, кучку клавиатур тоже держать не хочется.

Quote:

Originally Posted by Patron (Post 592372)
До сих пор, например, никто точно не знает, как на самом деле процессор БК работает с ОЗУ.

Там стоит ВП1-037, с ОЗУ ведь работает она? А процессор на RPLY от нее ориентируется. Какие тут подробности интересны?

Titus 13th April 2013 18:12

Quote:

Originally Posted by Patron (Post 592372)
Складывается впечатление, что большинству фанатов БК и 1801ВМ1 - их любимый компьютер и их любимый процессор откровенно не интересны. До сих пор, например, никто точно не знает, как на самом деле процессор БК работает с ОЗУ.

В смысле не известно? Тайминги или что?

Patron 13th April 2013 18:40

Quote:

Originally Posted by Titus (Post 592405)
В смысле не известно? Тайминги или что?

Непонятно, за счёт чего получаются наблюдаемые тайминги.

Например, на БК-0011М @ 4 МГц :

Code:

        CMP        @Tab(R1), @#Addr        6 x DATI                80 CLC
        CMP        @Tab(R1), @Tab(R0)        7 x DATI                80 CLC



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

Quote:

Originally Posted by Vslav (Post 592390)
Так R0 для смежных комманд уже не будет указывать на адрес следующей команды? Или это уже не суть важно для этого теста?

Совсем не важно.

Quote:

Можно на "эмуляторе ПЗУ" реализовать и UART, но с некоторым расползанием времянки и скорее всего без прерываний.
Прерывания весьма желательны, но можно попробовать и без них - в пультовом порту "Электроники 85" тоже, говорят - нет прерываний.
Если удастся сделать рабочий комплект RT-11 + HX для порта без прерываний - он будет грузиться и через пультовой порт Pro350 / Э-85.

Quote:

я сейчас буду заниматься захватом видеовывода и выводом его через USB в окошко Windows, уже прикупил макетик на CY7C680013.
Это хорошо для запуска игр, но для загрузки RT-11 и запуска тестов нужен именно терминальный обмен через последовательный порт.

Quote:

Там стоит ВП1-037, с ОЗУ ведь работает она? А процессор на RPLY от нее ориентируется. Какие тут подробности интересны?
Конечная задача, которую нужно решить - определение формулы расчёта количества тактов, которое потребуется для выполнения любой команды процессора БК, обращающейся к ОЗУ в циклах от 1 x DATI до 7 х DATI ( или 6 x DATI + DATO или 6 x DATI + DATIO ).

Для начала, наверное, хорошо бы получить осциллограммы выполнения всех вариантов команды CMP с кодом команды и всеми аргументами в ОЗУ:
Code:

              R0  (R0)  (R0)+  @(R0)+  -(R0)  @-(R0)  Addr  @#Addr  @Tab(R0)

Cmp    R1    14  35    35      49      36      49    49    49      61
Cmp    (R1)    30  43    43      57      44      58    57    57      70
Cmp    (R1)+  30  43    43      57      44      58    57    57      70
Cmp  @(R1)+  43  57    57      70      58      71    70    70      83
Cmp  -(R1)    31  44    44      57      45      58    57    57      71
Cmp  @-(R1)    44  57    57      71      58      72    71    71      84
Cmp    Addr    43  57    57      70      57      71    70    70      83
Cmp  @Tab(R1)  56  70    70      83      71      84    83    83      96

А потом то же самое для MOV и ADD.

Patron 15th April 2013 16:34

Новая загадка мистического процессора 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 становится одинаковым.

Vslav 15th April 2013 17:01

У меня RPLY на диаграммах какой-то странноватый - снимался прямо с ножки 39 процессора. На схеме БК-0010 нарисован триггер 155ТМ2, который синхронизирует этот сигнал со спадом CLC (ножка 1 процессора). На диаграммах такого не наблюдается - то ли неисправность, то ли схема на заводе и в этой части подшаманена - буду разбираться. Доделаю в PCAD плату эмулятора в разъем МПИ и продолжу с тестами.

А вопрос такой - выходы у ВМ1 - все типа "открытый коллектор" - как ГОСТ 26765.51-86 (Интерфейс Магистральный Параллельный МПИ) требует?
Есть желание ВМ1/2/3 к 3-вольтовой FPGA прицепить, если там "открытый коллектор", то можно попытаться вообще напрямую, без преобразования уровней - резисторы на +3.3V кинуть вместо +5V и все. С сигналом WTBT я самостоятельно разобрался - у него двойное назначение.

Patron 15th April 2013 17:09

Отрохов ( разработчик ВМ1 ) писал, что у них вышел какой-то глюк с обработкой RPLY, из-за чего на этот вход процессора приходится ставить триггер. Но чем плохо без триггера и как именно триггер должен изменять тайминги приёма RPLY - я так и не понял.

Vslav 16th April 2013 14:57

Quote:

Originally Posted by Patron (Post 593153)
Отрохов ( разработчик ВМ1 ) писал, что у них вышел какой-то глюк с обработкой RPLY, из-за чего на этот вход процессора приходится ставить триггер. Но чем плохо без триггера и как именно триггер должен изменять тайминги приёма RPLY - я так и не понял.

С форума БК0010 "Тонкости и толстости ВМ1"
Quote:

Originally Posted by anonymous

? anonymous - 12.02.2011 02:05
...
Это одна из проблем ВМ1, заключающаяся в том, что у него микропрограммы работы с шиной вылетают в зависание полное иногда, если RPLY в цикле обмена сразу устанавливать с DIN/DOUT и сразу снимать - почему-то не умеет он работать с быстрыми устройствами, надо линию задержки вводить, чтоб отсрочить его появление и уход в пассивное состояние

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

Patron 16th April 2013 15:38

Quote:

Originally Posted by Vslav (Post 593442)
Повиснет на уровне автомата состояний шины я так понял, без внешнего задерживающего триггера. Но это не снимает вопрос чего у меня такой странный RPLY на картинках

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

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

Хотя, не исключено, что достаточно и задержки до ближайшего фронта CLK, но задержку в половину такта оказалось проще реализовать.

svofski 16th April 2013 19:28

Quote:

Originally Posted by Vslav (Post 592390)
Но я сейчас буду заниматься захватом видеовывода и выводом его через USB в окошко Windows, уже прикупил макетик на CY7C680013.

Я такое уже делал: http://sensi.org/~svo/bkvideo -- вдруг пригодится.

Vslav 17th April 2013 01:24

Разобрался насчет REPLY. У меня БК-0010 "переразведенка", с подшаманенной на заводе схемой. RPLY поступающий с разъема МПИ и с вывода 34 ВП1-037, объединяются на ЛА3 D7.4 и инвертируются на ЛН1 D5.4 как на штатной схеме. А дальше на моем экземпляре установлен ИР1, который попутно формирует видеовывод, и тактируется от 12МГц, и вот на одном из его свободных от видеовывода разрядов сделали задержку RPLY на четверть такта процессорной частоты (то есть на 80нс примерно).
Далее еще интересный момент - самый первый RPLY на моих диаграммах - при чтении SEL1 - он формируется отнюдь не ВП1-037, а самостоятельно внутри процессора. Поэтому у него такая времянка. Любопытно, в многопроцессорной системе, куда перезжают эти регистры 177714 и 177716 - не могут же они в этом случае не зависеть от номера процессора.

Patron 17th April 2013 01:44

Регистры зависят - их адреса определяются состоянием ножек 26 и 27:
Code:

Адреса внешних регистров:
номер МП                адреса регистров
                SEL1        SEL2
00                177716        177714
01                177736        177734
10                177756        177754
11                177776        177774

но вот база векторов HALT-моды, похоже - не зависит и всегда = 160000

Vslav 17th April 2013 11:25

Я так понимаю что от номера процессора в системе (выводы 26, 27) зависит базовый адрес всего блока регистров 177700..177716, не только 177714 и 177716.
177700..177712 - внутренние, а 177714 и 177716 - внешние, по отношению к ВМ1.
А кто в БК-0010 формирует адрес начального старта? В БК-0011 на AD15 и AD14 есть явно активируемые при чтениии SEL1 выходы 155ЛН2 - в итоге дает 140000. Но в БК-0010 такой схемы нет, получается сам ВМ1 формирует старший разряд (0 в инвертированном AD15)?

Patron 17th April 2013 13:09

Очень любопытно!

Значит ли это, что если SEL1 & 0xFF00 читается как 000000 - старт будет с адреса 0100000, а если как 020000 - старт будет с адреса 0120000 ..

...

Alex_K 17th April 2013 13:26

Quote:

Originally Posted by Vslav (Post 593837)
А кто в БК-0010 формирует адрес начального старта? В БК-0011 на AD15 и AD14 есть явно активируемые при чтениии SEL1 выходы 155ЛН2 - в итоге дает 140000. Но в БК-0010 такой схемы нет, получается сам ВМ1 формирует старший разряд (0 в инвертированном AD15)?

Если не ошибаюсь, то адрес начального старта формирует 1801ВП1-037. Регистр она распознает не по сигналу SEL1, а по адресному обмену.

Vslav 18th April 2013 21:26

Quote:

Originally Posted by Alex_K (Post 593867)
Если не ошибаюсь, то адрес начального старта формирует 1801ВП1-037. Регистр она распознает не по сигналу SEL1, а по адресному обмену.

Да, это похоже на правду - я отрезал ножку ВП1-037 от шины данных, и старший разряд стартового вектора не сформировался.
Нормальный такой ВМ1 - на 177700-177712 формируется снаружи и RPLY и данные, хотя чтение идет "самим собой" внутренних регистров. Но это вполне допустимо. А вот для 177714-177716 - формирует сам для себя только RPLY - данные внешняя система должна уж как-нибудь сама предоставить. Что в-общем то нарушает протокол обмена МПИ - RPLY должен снаружи формировать модуль, предоставляющий данные, а не схема внутри процессора.

Alex_K 18th April 2013 21:32

Quote:

Originally Posted by Vslav (Post 594303)
Да, это похоже на правду - я отрезал ножку ВП1-037 от шины данных, и старший разряд стартового вектора не сформировался.
Нормальный такой ВМ1 - на 177700-177712 формируется снаружи и RPLY и данные, хотя чтение идет "самим собой" внутренних регистров. Но это вполне допустимо. А вот для 177714-177716 - формирует сам для себя только RPLY - данные внешняя система должна уж как-нибудь сама предоставить. Что в-общем то нарушает протокол обмена МПИ - RPLY должен снаружи формировать модуль, предоставляющий данные, а не схема внутри процессора.

В описании сказано, что для регистров SEL1 и SEL2 формировать сигнал RPLY не надо, достаточно успеть выставить данные или записать их. Наверное это сделано для упрощения внешней схемы. А если регистров нет, то в данном случае будет читаться ноль, и запуск процессора всегда произойдет с нулевого адреса. А по поводу снаружи регистров 177700-177712 - их можно прочесть другим устройством через механизм прямого доступа к памяти. Плюс к тому же они разные в многопроцессорной системе, и программа может прочесть регистры любого процессора таким образом.

darkstar 5th November 2013 12:24

Народ, подскажите пожалуйста.
Разбираюсь с 1801ВМ1.
Если на шине AD (15...0) такие уровни 0000 0000 0011 0001, то это число 61 или 177716 ?
Другими словами - +5 вольт на линии - это ноль или единица?

MM 5th November 2013 13:12

На МПИ БК принято за лог. 1 уровень 0в, за лог. 0 +5в.
Приведенный двоичный адрес соответствует 177716 - если осциллографом мерить.
Если ВМ1 выдает этот адрес, он должен ( в БК ) одновременно выдавать уровень 0в. на линии чтения системного порта 177716 - см. Э3 БК.
( Т.е. при начальном пуске требовать адрес старта с 177716 - старший байт ).

darkstar 5th November 2013 13:58

Спасибо большое!
177716 - это я к примеру привёл. Потому, что (как я понял) проц стартует и обращается к этому адресу за старшим байтом адреса перехода.
Разбираюсь в одном приёмнике, управление которого собрано как раз на К1801ВМ1.
Прочитал ПЗУ-шку, теперь ищу дизассемблер.

esl 5th November 2013 15:03

IDA

darkstar 5th November 2013 20:24

Ок.
Уже установил IDA 6.1 и поставил надстройку от Patron вот отсюда:
http://zx.pk.ru/showthread.php?postid=367209
правда она для версии 5.2, но вроде как работает.

Некоторые команды не распознаются, например
.Word 7002 или
.Word 7601
но возможно я уже залез в блок констант.

Межблочная шина МПИ. Думаю зацепиться на неё и посмотреть что куда пересылается.

MM 5th November 2013 21:27

Разрешите сообщить начинающему ( программисту ), что самой лучшей ковырялкой из всех, что за 28 лет я видел - это DESS V5.00 от ОС ДВК ( она же RT11 V5.01 )
дизассемблер там написан чуть ниже таблицы чисел - а транслировать можно
командой "T" ( пословно ). Листинг трансляции можно вывести на принтер - но поблочно ( что несколько смущает начинающих хакеров ). Гугля в помощь.
Однако тот DESS, что поставляется в комплекте с эмулем ДВК - непрофессионально
дополнен Хексами, которые в принципе не нужны на DEC-системах, и по этому
там испорчен набор команд в ассемблере, в отличии от DESS V5.00.
*
Вообще у Dessa есть несколько недостатков:
1.Нельзя назначить виртуальный адрес исследуемого массива - только физический
( особенно неудобно расковыривать дурные ПЗУ, код которых неперемещаем ( 95%))
2.Нет команды заполнить массив числами - для писателей пригодилось бы.
3.Нет команды перемещения блоков байтов - приходится ручками перелопачивать кучи цифр.
4.Потерял вариант, где вывод ассемблера был не на принтер/девайс, а в файл .
5.Других недостатков за 25 лет работы и написания кучи ПЗУ не выявил.

darkstar 6th November 2013 07:14

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)+

Или лыжи не едут, или ... одно из двух.

b2m 6th November 2013 11:54

Quote:

Originally Posted by darkstar (Post 641549)
Или лыжи не едут, или ... одно из двух.

Если учесть, что старший байт по нечётному адресу, то получится:
143025 BICB @(R0)+,(R5)+
140220 BICB R2,@(R0)+

Если байты переставить, то будет:
012706 110300 MOV #110300,SP загрузить число 0110300 в регистр SP (R6).

darkstar 6th November 2013 12:45

Так. Стоп.
Старший байт ведь идёт первым?
или нет?
"старший байт по нечётному адресу" - буду осмысливать :)

DESS нашёл, идёт стандартом к DVK Emulator:
http://zx.pk.ru/showthread.php?t=18351
Методом тыка нашёл управляющие клавиши:
D - на слово назад
T - на слово вперёд
A - переход по указанному адресу
B - выбор блока
R - вид кода (Word-Hex-Byte-Rad), но нужно отключить CapsLock
I - дополнительная строчка с переводом текущей позиции в другую систему счисления
F - загрузка нового файла

Единственно, пока не понял, как внешние файлы туда подключить...

MM 6th November 2013 13:49

В 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 .

darkstar 6th November 2013 14:48

Спасибо.
Допустим у меня есть дамп ПЗУ в файле dump.bin.
Я его переименовываю dump.dsk ?
Как увидеть его из DESS?
По умолчанию у меня HD0 = HDSYS.DSK.
Указываю HD1 = dump.dsk.
набираю команду mount
спрашивает Device?
пишу LD1
спашивает File?
пишу dump
и он мне в ответ - LD-F-File nod found DK:dump.DSK
То есть, нужна какая-то файловая система в прицепляемом файле...

MM 6th November 2013 15:09

К сожалению, просто так описанный фокус не проходит.
Не помню точно, но наличие ФС на монтируемых дисках - необязательное условие.
Что бы RT-11 не ругалась, не забывайте указывать, где ( т.е. "путь" ) расположен файл для драйвера LD. Например : SY:XY.DSK
Для добавления отдельных файлов в диск типа .dsk под RT-11 есть плагин для тотал командира - хрен знает, как его ставить - как-то промучился полдня, но поставил -
видимо, там какой-то баг в самом командире с установкой.
*
В Вашем случае можно совсем не монтировать, а при запуске DESS просто указать,
например, DW1: - DESS не нуждается в ФС на девайсе и воспринимает его просто как файл. Если чесно, настоятельно не рекомендую патчить DESSом файлы размером свыше 64 блока - возможны самые дурные варианты, например запись
исправления не в, допустим, 128-й блок файла, а в 1-й - проверено годами, но этот баг вылезает не всегда.

Patron 6th November 2013 15:54

Quote:

Originally Posted by darkstar (Post 641667)
Допустим у меня есть дамп ПЗУ в файле dump.bin.
Как увидеть его из DESS?

Нужно скопировать dump.bin в образ диска HDSYS.DSK.

Можно сделать это при помощи плагина для TotalCommander, описанного ЗДЕСЬ.

darkstar 7th November 2013 07:50

Ого! Заработало!
Установил плагин:
Меню Конфигурация -> Настройка -> Плагины
Архиваторные плагины .wcx "Настройка"
Файлы с расширением "wcx"
Обзор -> RT-11dsk.wcx
И теперь тотал коммандер открывает файлы *.dsk при помощи <Ctrl>+<PgDown>.
Вовнутрь HDSYS.DSK удалось скопировать dump.bin только после переименования его в dump1.SAV,
т.к. файл DUMP.SAV там уже есть, а расширение .BIN не принимается.

после выполнения команды DIR напротив имени файла выводится его объём в блоках (по 512 байт)?
У меня получилось 32 блока. Исходный файл занимает 16 кб.

Теперь DESS читает мой файл! Ура!
Но байты всё же придётся переставить...

Байты переставил. Копаюсь в файле.
А может ли DESS вывести результат дизассемблирования в виде текстового файла?

Patron 7th November 2013 14:36

Quote:

Originally Posted by darkstar (Post 642005)
И теперь тотал коммандер открывает файлы *.dsk при помощи <Ctrl>+<PgDown>

При штатной установке DSK-плагина - расширение *.dsk регистрируется в TotalCommander за этим плагином и образы можно открывать просто нажав <Enter>.

Quote:

расширение .BIN не принимается
DESS может открыть файл с любым именем и расширением - нужно только полностью их указать:

Code:

.DESS STARTS
Не найден файл DK:STARTS.SAV
 
.DESS STARTS.COM

Block=000000/00000. Adres=000000 Type=Word  Edit  DK:STARTS.COM  Size=00001.
000/ 051441 052105 052440 051123 047040 051517 040527 006520 *!SET USR NOSWAP.*
020/ 020412 042523 020124 054105 052111 047040 051517 040527 *.!SET EXIT NOSWA*
040/ 006520 051412 052105 052040 020124 041523 050117 006505 *P..SET TT SCOPE.*
060/ 051412 052105 042440 020115 047117 005015 042523 020124 *.SET EM ON..SET *
100/ 046123 047440 006516 040412 051523 044040 031504 042040 *SL ON..ASS HD3 D*
120/ 006513 000012 000000 000000 000000 000000 000000 000000 *K...............*


hobot 7th November 2013 17:20

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 блоков которая (она меня полностью устраивает и не глючит на УК-НЦ (живой и эмуляторе).

---------------------------------------
в случае непредвиденных осложнений правьте ссылки на зеркало архива !!!

darkstar 8th November 2013 07:50

5 Attachment(s)
hobot, спасибо.
Книжку с ассемблером перегнал в DJVU.

Буду разбираться, что же означает:
TRAP 044
TRAP 012
TRAP 033
Вроде как это команда на прерывание, но куда они ведут - непонятно...
в таблице векторов прерываний по этим адресам - пусто...

b2m 8th November 2013 12:02

Quote:

Originally Posted by darkstar (Post 642300)
Вроде как это команда на прерывание, но куда они ведут - непонятно...
в таблице векторов прерываний по этим адресам - пусто...

Да, прерывание, но вектор всегда один 034, так же как и EMT, у которого вектор 030.

darkstar 8th November 2013 12:13

Так.
А зачем тогда их такое множество, этих TRAP-ов?
Чем они отличаются друг от друга?
Под них аж вон сколько команд выделили: от 104400 до 104777. Зачем?
Видимо, при переходе по этому прерыванию, ещё какие-то параметры передаются...

Вроде как ни одного EMT в тексте программы не встретил. Да и по адресу 000 030 - пусто.
Зато на адресе 000 034 есть указатель на 004 504.
Я так понимаю, что число 000 200 сразу за адресом перехода в таблице векторов - это слово состояния процессора на период обработки прерывания. Оно устанавливает бит Р=1 и запрещает все маскируемые прерывания.

b2m 8th November 2013 16:45

Quote:

Originally Posted by darkstar (Post 642323)
Так.
А зачем тогда их такое множество, этих TRAP-ов?
Чем они отличаются друг от друга?
Под них аж вон сколько команд выделили: от 104400 до 104777. Зачем?

Чтобы не передавать номер функции в регистре. Номер функции программа обработки прерывания считывает из кода команды EMT/TRAP. Для чего придумали две команды, я не знаю, но обычно EMT - это системный сервис, так сказать API операционной системы, который обычно документирован.

-=RUS=- 8th November 2013 21:04

EMulator Trap (EMT) - можно самому создавать свои, для удобства в своих программах, как и Trap.

darkstar 9th November 2013 07:55

Ничего не понял...
В книжке 3 от ДВК сказано:
- стр.31 "В командах EMT и TRAP старший байт слова содержит код команды, а младший байт предназначен для передачи информации драйверам внутренних прерываний".
Что это за информация? И каково её практическое использование?

Patron 9th November 2013 14:12

Quote:

Originally Posted by darkstar (Post 642562)
Что это за информация? И каково её практическое использование?

Это просто байт данных, являющийся частью кода команды. Поскольку байт имеет 256 возможных значений - есть по 256 вариантов кода команд EMT и TRAP с различными младшими байтами.

Обычно младший байт команды EMT/TRAP используется как номер вызываемой подпрограммы, а извлекается он из кода при помощи сохранённого в стеке адреса возврата:
Code:

.SBTTL        ;....................... TRAP-ДИСПЕТЧЕР ........................;

TRP:
        MOV        (SP)+,(SP)        ; Позволяет выйти по RETURN вместо RTI
        MOV        (SP),R0                ; R0 - Адрес возврата
        MOVB        -2(R0),R0        ; R0 - Аргумент команды TRAP
        ASL        R0                ; Номер подпрограммы х2
        MOV        TBL(R0),R0        ; Взять адрес подпрограммы из таблицы
        JMP        (R0)                ; Перейти по адресу подпрограммы


b2m 9th November 2013 22:59

Quote:

Originally Posted by darkstar (Post 642562)
Что это за информация? И каково её практическое использование?

Я же говорил, обычно это номер вызываемой функции.


All times are GMT +4. The time now is 02:31.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.