User Tag List

Страница 4 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 31 по 40 из 52

Тема: Extended Instructions Set (EIS): MUL, DIV, ASH, ASHC

  1. #31

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Еще спорный момент с флагом C при умножении.
    "C: set if the result is less than -2^15 or greater than or equal to 2^15."
    Как я понимаю из этого описания, нужно установить флаг если результат <-2^15 или >=2^15, т.е. текущий вариант процедуры неправильно установит флаг, если результат =-2^15. Или я неправильно понял описание (или описание не совсем корректное). Для проверки можно, например, умножить #1 на #100000
    Странно, мне казалось, что у меня это учитывается (результат умножения, положительный, ещё до учёта знака, в R0_R1):
    Код:
    7:	TST R0		; high 16 bit
    	BNE 71
    	TST R1		; low 16 bit
    	BPL 72
    71:		INC R2	; set bit C in PSW
    72:	TST R3		; result's sign
    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    В делении аналогичный фрагмент с не вполне корректным изменением знака
    Код:
    COM R4		; dividend was negative
    NEG R3
    Это поправлял, но, видимо, при дальнейшей доработке взял ещё неисправленный вариант. Сейчас так:
    Код:
    	COM R4		; dividend was negative
    	NEG R3
    	BNE 4
    		INC R3
    4:
    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    Мелочь, но все же в MUL строка
    6: BCC 7
    лишняя. Нулевые множители в основной цикл не попадают, значит перед нулевым R2 точно был единичный бит в младшем разряде.
    Точно, спасибо. Убрал.
    Архив обновил: http://thesands.ru/bk0010/EIS-driver-for-BK0010.zip
    Последний раз редактировалось Manwe; 09.02.2020 в 11:24.
    manwe.pdp-11.ru

  2. #31
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #32

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    у меня это учитывается
    Не учитывается случай, когда результат умножения=-32768dec. По процитированному описанию в этом случае флаг C должен быть сброшен, а процедура эмуляции его в этом случае устанавливает.

  4. #33

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Не учитывается случай, когда результат умножения=-32768dec. По процитированному описанию в этом случае флаг C должен быть сброшен, а процедура эмуляции его в этом случае устанавливает.
    До выяснения знака результата (TST R3) промежуточный ответ, стало быть, равен 32768. В этом случае регистр R0 пустой, а регистр R1 в двоичном виде 1000 0000 0000 0000. Тогда инструкция TST R1 считает, что результат отрицательный (ведь установлен старший бит) и не срабатывает переход BPL 72. А значит, выполняется инструкция INC R2, после которой в R2 единица. Это как раз бит C слова состояния процессора.
    manwe.pdp-11.ru

  5. #34

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    До выяснения знака результата (TST R3) промежуточный ответ, стало быть, равен 32768. В этом случае регистр R0 пустой, а регистр R1 в двоичном виде 1000 0000 0000 0000. Тогда инструкция TST R1 считает, что результат отрицательный (ведь установлен старший бит) и не срабатывает переход BPL 72. А значит, выполняется инструкция INC R2, после которой в R2 единица. Это как раз бит C слова состояния процессора.
    Это я понимаю, но это не соответствует описанию. Возможно и описание не соответствует советским процессорам, но это я, к сожалению, проверить не могу.

  6. #35

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Это я понимаю, но это не соответствует описанию. Возможно и описание не соответствует советским процессорам, но это я, к сожалению, проверить не могу.
    Хм, проверил на ВМ1Г - действительно флаг C сброшен.
    Интересно, как это обойти? Тупо сравнивать R1 с числом 100000, и устанавливать флаг C только если R1 строго больше (BHI)?
    manwe.pdp-11.ru

    Этот пользователь поблагодарил Manwe за это полезное сообщение:

    ivagor(09.02.2020)

  7. #36

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо за проверку. Реализовать эту фичу можно разными способами, сам бы я скорее влез в учет знака (между 72: и 73: ). Тупой вариант - сравниваем результат (оба слова) c -32768dec, и если совпало, то сбрасываем C (в R2) обратно.

  8. #37

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Можно попробовать t402 - заводской тест 791402, EIS для 1801ВМ2, хорошо тестирует ASH, DIV, MUL.
    Как бы это собрать под БК? Смотрю процедуру outhex - там обращения к 177714 и 177715 - вообще не про БК ни разу
    gid, а как Вы это тестировали? Может быть есть бинарник под БК? Независимый от операционной системы.
    manwe.pdp-11.ru

  9. #38

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    c -32768dec
    Удобнее, конечно, сравнить с 32768 до изменения знака, но уже в ветке изменения знака, когда известно, что результат <0.

  10. #39

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Как бы это собрать под БК? Смотрю процедуру outhex - там обращения к 177714 и 177715 - вообще не про БК ни разу
    gid, а как Вы это тестировали? Может быть есть бинарник под БК? Независимый от операционной системы.
    Там все особенности платформы изолированы в очень небольшом количестве функций, есть и оригинальный 402-ой тест, портировать на БК не должно быть сложно.

  11. #40

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я всё надеюсь, может у gid есть уже скомпилированный вариант теста. Чтобы два раза не проделывать одну и ту же работу (тем более, что я в макро-ассемблере не разбираюсь).
    manwe.pdp-11.ru

Страница 4 из 6 ПерваяПервая 123456 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 0
    Последнее: 29.08.2017, 14:06
  2. Sector II - Extended
    от Splinter в разделе Музыка
    Ответов: 7
    Последнее: 07.02.2014, 06:45
  3. EXTENDED MEMORY DETECTION
    от VELESOFT в разделе Память
    Ответов: 1
    Последнее: 04.04.2010, 22:50
  4. gfx extended :)
    от riskej в разделе Графика
    Ответов: 12
    Последнее: 06.08.2008, 17:58
  5. Fast 48x48 MUL | DIV
    от Sinus в разделе Программирование
    Ответов: 6
    Последнее: 05.07.2005, 17:00

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •