User Tag List

Страница 3 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 21 по 30 из 52

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

  1. #21

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

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Но в итоге по количеству команд то же самое получается? Или на одну короче?
    На два байта короче.
    Цитата Сообщение от Manwe Посмотреть сообщение
    Трюк с R2 выглядит непонятным - значение этого регистра ещё не определено, но уже используется.
    Да, при использовании в процедуре эмуляции эти команды надо поместить не там, где была команда CLR R3, а после MOV ARG2,R2. Пробовал на отдельной процедуре, поэтому пропустил этот момент.

    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    Да, при использовании в процедуре эмуляции эти команды надо поместить не там, где была команда CLR R3, а после MOV ARG2,R2. Пробовал на отдельной процедуре, поэтому пропустил этот момент.
    И тогда получается еще надо добавить команду тестирования R2, в итоге 2 байта обратно. Т.е. при использовании в процедуре эмуляции вариант с inc и dec все же чуть лучше (по скорости). При использовании в отдельной процедуре умножения вариант с mov и xor чуть лучше.

    - - - Добавлено - - -

    В делении можно чуть сократить операции со знаками.
    1. DEC R2 надо заменить на INC R2, как в первой проверке.
    2. MOV #240,DIV1 и MOV #5401,DIV1 можно убрать. Вместо MOV #5401,DIV1 надо добавить bis #100000,r2.
    3. После POP R0 теперь нужно проверить знак, который покажет, нужно ли поменять знак остатка.
    4. Потом asr r0 и во флаге C признак необходимости изменения знака частного.
    Пункты 3 и 4 можно поменять местами. Ну и заготовка для команды DIV1: NOP не нужна.

    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    Пункты 3 и 4 можно поменять местами.
    Но лучше не стоит, или придется добавить еще одну команду.

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

    Manwe(08.02.2020)

  2. #22

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

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    Ответ: в R5 число 100000, флаги: N и C
    Да, всё верно, проверил аппаратное умножение на ВМ1Г. В эмуляторе EIS теперь такой же результат.

    Сейчас бьюсь с тем, что MKDOS при запуске программ подгружает Монитор от БК 0010 и, видимо, запускает какую-то из его процедур инициализации, которая перетирает 10-ый вектор. Пытаюсь отследить где это делается. Вроде как с адреса 27200 хранится Монитор и он копируется на адрес 126000. Код копирования по адресу 17670.

    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    3. После POP R0 теперь нужно проверить знак, который покажет, нужно ли поменять знак остатка.
    4. Потом asr r0 и во флаге C признак необходимости изменения знака частного.
    Это не понял. У меня сейчас:
    Код:
    POP R0		; restore result's sign
    BEQ DIV1		; if result is positive
    	NEG R2
    Это и есть проверка знака и по условию изменение знака частного.
    Последний раз редактировалось Manwe; 08.02.2020 в 14:01.
    manwe.pdp-11.ru

  3. #23

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

    По умолчанию

    Идея в том, чтобы R2(до PUSH R2)/R0(после POP R0) хранил оба признака - в младшем бите признак необходимости изменения знака частного и в знаковом - признак необходимости изменения знака остатка. В итоге станет чуть короче и не нужен будет самомодифицирующийся код (для данной задачи).
    Последний раз редактировалось ivagor; 08.02.2020 в 14:54.

  4. #24

    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    613
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    136 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    подгружает Монитор от БК 0010 и, видимо, запускает какую-то из его процедур инициализации
    Инициализация системной области (EMT 14), обычно вызывают либо сразу подпрограмму по адресу 100140, (при этом затираются нулями вектора 10, 14, 20, 24), либо переходят куда нибудь внутрь подпрограммы, если нужно модифицировать инициализацию по-своему (при этом вышеуказанные вектора не затираются нулями, но могут модифицироваться по-своему).

  5. #25

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

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    Инициализация системной области (EMT 14), обычно вызывают либо сразу подпрограмму по адресу 100140, (при этом затираются нулями вектора 10, 14, 20, 24), либо переходят куда нибудь внутрь подпрограммы, если нужно модифицировать инициализацию по-своему (при этом вышеуказанные вектора не затираются нулями, но могут модифицироваться по-своему).
    Спасибо, уже нашёл. Пропатчил, проверил на MKDOS 3.15, 3.17 и 3.18. Теперь буду ковырять ANDOS.

    Цитата Сообщение от ivagor Посмотреть сообщение
    Идея в том, чтобы R2(до PUSH R2)/R0(после POP R0) хранил оба признака - в младшем бите признак необходимости изменения знака частного и в знаковом - признак необходимости изменения знака остатка. В итоге станет чуть короче и не нужен будет самомодифицирующийся код (для данной задачи).
    Получилось сократить на 4 байта. Прогнать бы полноценные тесты теперь.
    http://thesands.ru/bk0010/EIS-driver-for-BK0010.zip
    Последний раз редактировалось Manwe; 08.02.2020 в 20:31.
    manwe.pdp-11.ru

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


  6. #26

    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    613
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    136 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Прогнать бы полноценные тесты теперь.
    Снова не проходит сдаточный тест 791402.
    ошибка в ASH:
    Код:
    mov #20, R5
    mov #-1, R4
    ash R5, R4
    в результате флаги должны быть ZVC, но возвращается только Z

    небольшой косяк в DIV: при выходе из эмуляции возвращается не тот приоритет, что был до входа, т.е. на входе в прерывание PSW было 0, а на выходе стало 340, и тест считает, что результат PSW неверный, у первых двух тестов деления флаги-признаки совпадают, остальные смотреть не стал, из-за неверного приоритета, все тесты на деление считаются ошибочными.

  7. #27

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

    По умолчанию

    Спасибо за тест!

    Цитата Сообщение от gid Посмотреть сообщение
    Снова не проходит сдаточный тест 791402. ошибка в ASH:
    в результате флаги должны быть ZVC, но возвращается только Z
    Ах, я же там упростил если сдвиг больше чем на 15. А почему, кстати, бит V установлен? Разве второй аргумент меняет знак?
    Цитирую документацию:
    V – устанавливается, если во время проведения операции сдвига было зафиксировано изменение знакового разряда результата (возможно только при сдвиге влево), в противном случае очищается.

    небольшой косяк в DIV: при выходе из эмуляции возвращается не тот приоритет, что был до входа
    Спасибо, посмотрю.

    Update: поправил DIV и ASH. Обновлённый драйвер по той же ссылке: http://thesands.ru/bk0010/EIS-driver-for-BK0010.zip
    А где взять эти магические тесты, чтобы мне самому тестировать и не отвлекать занятых людей почём зря?
    Последний раз редактировалось Manwe; 08.02.2020 в 22:16.
    manwe.pdp-11.ru

  8. #28

    Регистрация
    26.04.2009
    Адрес
    г. Воронеж
    Сообщений
    6,480
    Спасибо Благодарностей отдано 
    310
    Спасибо Благодарностей получено 
    249
    Поблагодарили
    217 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    А где взять эти магические тесты
    Где-то тут.
    "Во времена всеобщей лжи говорить правду - это экстремизм" - афоризм.

  9. #29

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

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    А где взять эти магические тесты
    Можно попробовать t402 - заводской тест 791402, EIS для 1801ВМ2, хорошо тестирует ASH, DIV, MUL.

  10. #30

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

    По умолчанию

    Мелочь, но все же в MUL строка
    6: BCC 7
    лишняя. Нулевые множители в основной цикл не попадают, значит перед нулевым R2 точно был единичный бит в младшем разряде.

    Эту штуку не поправили, потому что все же эмулятор формирует флаг как на реале, или не стали проверять?

    - - - Добавлено - - -

    В процедуре эмуляции деления не поправили.
    Последний раз редактировалось ivagor; 09.02.2020 в 07:28.

Страница 3 из 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

Ваши права

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